p_table <- function(tab_data, ...) {
  tab_data_2 <- deparse(substitute(tab_data))
  
  table_p <- do.call(CreateTableOne, 
                     list(data = as.name(tab_data_2), includeNA = TRUE, ...))
  table_p_out <- print(table_p,
                       showAllLevels = TRUE,
                       printToggle = FALSE)
  kable(table_p_out,
        align = "c")
}
uni_var <- function(test_var, data_imp) {
                
        cat("_________________________________________________")
        cat("\n")
        cat("   \n##", test_var)
        cat("\n")
        cat("_________________________________________________")
        cat("\n")
        
        f <- as.formula(paste("Surv(DX_LASTCONTACT_DEATH_MONTHS, PUF_VITAL_STATUS == 0)",
                              as.name(test_var),
                              sep = " ~ " ))
        
        data_imp_2 <- deparse(substitute(data_imp))
        km_fit <- do.call("survfit", list(formula = f, data = as.name(data_imp_2)))
        print(km_fit)
        cat("\n")
        print(summary(km_fit, times = c(12, 24, 36, 48, 60, 120)))
        cat("\n")
        cat("\n")
        cat("\n")
        cat("   \n## Univariable Cox Proportional Hazard Model for: ", test_var)
        cat("\n")
        cat("\n")
        n_levels <- nlevels(data_imp[[test_var]])
        if(n_levels == 1){
                print("Only one level, no Cox model performed")
                cat("\n")
        } else {
                cox_fit <- do.call("coxph", list(formula = f, data = as.name(data_imp_2)))
                print(summary(cox_fit))
                cat("\n")
                
                do.call("ggforest",
                         list(model = cox_fit, data = as.name(data_imp_2)))
        }
        cat("\n")
        cat("\n")
        cat("\n")
        cat("   \n## Unadjusted Kaplan Meier Overall Survival Curve for: ", test_var)
        p <- do.call("ggsurvplot",
                     list(fit = km_fit, data = as.name(data_imp_2),
                          palette = "jco", censor = FALSE, legend = "right",
                          linetype = "strata", xlab = "Time (Months)"))
        print(p)
}
col.width <- c(37, 10, 1, 1, 3, 1, 2, 1, 2, 1, 1, 1, 1, 1, 1, 8, 2, 2, 2, 4, 4, 1, 4, 1, 1,
               1, 3, 2, 2, 8, 2, 5, 5, 5, 4, 5, 5, 5,4, 2, 1, 2, 1, 3, 1, 1, 1, 1, 1, 1, 3,
               3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 6, 8,
               8, 8, 2, 1, 1, 1, 1, 8, 1, 1, 8, 1, 1, 2, 2, 5, 2, 5, 3, 1, 3, 1, 8, 8, 2, 8,
               2, 8, 2, 2, 1, 8, 1, 1, 1, 1, 1, 8, 1, 2, 2, 2, 2, 2, 1, 1, 1, 2, 1, 3, 1, 1,
               1, 1, 1, 1, 1, 1, 1)
col.names.abr <- c("PUF_CASE_ID", "PUF_FACILITY_ID", "FACILITY_TYPE_CD", "FACILITY_LOCATION_CD",
                   "AGE", "SEX", "RACE", "SPANISH_HISPANIC_ORIGIN", "INSURANCE_STATUS",
                   "MED_INC_QUAR_00", "NO_HSD_QUAR_00", "UR_CD_03", "MED_INC_QUAR_12", "NO_HSD_QUAR_12",
                   "UR_CD_13", "CROWFLY", "CDCC_TOTAL_BEST", "SEQUENCE_NUMBER", "CLASS_OF_CASE",
                   "YEAR_OF_DIAGNOSIS", "PRIMARY_SITE", "LATERALITY", "HISTOLOGY", "BEHAVIOR", "GRADE",
                   "DIAGNOSTIC_CONFIRMATION", "TUMOR_SIZE", "REGIONAL_NODES_POSITIVE",
                   "REGIONAL_NODES_EXAMINED", "DX_STAGING_PROC_DAYS", "RX_SUMM_DXSTG_PROC", "TNM_CLIN_T",
                   "TNM_CLIN_N", "TNM_CLIN_M", "TNM_CLIN_STAGE_GROUP", "TNM_PATH_T", "TNM_PATH_N", "TNM_PATH_M",
                   "TNM_PATH_STAGE_GROUP", "TNM_EDITION_NUMBER", "ANALYTIC_STAGE_GROUP", "CS_METS_AT_DX",
                   "CS_METS_EVAL", "CS_EXTENSION", "CS_TUMOR_SIZEEXT_EVAL", "CS_METS_DX_BONE", "CS_METS_DX_BRAIN",
                   "CS_METS_DX_LIVER", "CS_METS_DX_LUNG", "LYMPH_VASCULAR_INVASION", "CS_SITESPECIFIC_FACTOR_1",
                   "CS_SITESPECIFIC_FACTOR_2", "CS_SITESPECIFIC_FACTOR_3", "CS_SITESPECIFIC_FACTOR_4",
                   "CS_SITESPECIFIC_FACTOR_5", "CS_SITESPECIFIC_FACTOR_6", "CS_SITESPECIFIC_FACTOR_7",
                   "CS_SITESPECIFIC_FACTOR_8", "CS_SITESPECIFIC_FACTOR_9", "CS_SITESPECIFIC_FACTOR_10",
                   "CS_SITESPECIFIC_FACTOR_11", "CS_SITESPECIFIC_FACTOR_12", "CS_SITESPECIFIC_FACTOR_13",
                   "CS_SITESPECIFIC_FACTOR_14", "CS_SITESPECIFIC_FACTOR_15", "CS_SITESPECIFIC_FACTOR_16",
                   "CS_SITESPECIFIC_FACTOR_17", "CS_SITESPECIFIC_FACTOR_18", "CS_SITESPECIFIC_FACTOR_19",
                   "CS_SITESPECIFIC_FACTOR_20", "CS_SITESPECIFIC_FACTOR_21", "CS_SITESPECIFIC_FACTOR_22",
                   "CS_SITESPECIFIC_FACTOR_23", "CS_SITESPECIFIC_FACTOR_24", "CS_SITESPECIFIC_FACTOR_25",
                   "CS_VERSION_LATEST", "DX_RX_STARTED_DAYS", "DX_SURG_STARTED_DAYS", "DX_DEFSURG_STARTED_DAYS",
                   "RX_SUMM_SURG_PRIM_SITE", "RX_HOSP_SURG_APPR_2010", "RX_SUMM_SURGICAL_MARGINS",
                   "RX_SUMM_SCOPE_REG_LN_SUR", "RX_SUMM_SURG_OTH_REGDIS", "SURG_DISCHARGE_DAYS", "READM_HOSP_30_DAYS",
                   "REASON_FOR_NO_SURGERY", "DX_RAD_STARTED_DAYS", "RX_SUMM_RADIATION", "RAD_LOCATION_OF_RX",
                   "RAD_TREAT_VOL", "RAD_REGIONAL_RX_MODALITY", "RAD_REGIONAL_DOSE_CGY", "RAD_BOOST_RX_MODALITY",
                   "RAD_BOOST_DOSE_CGY", "RAD_NUM_TREAT_VOL", "RX_SUMM_SURGRAD_SEQ", "RAD_ELAPSED_RX_DAYS",
                   "REASON_FOR_NO_RADIATION", "DX_SYSTEMIC_STARTED_DAYS", "DX_CHEMO_STARTED_DAYS", "RX_SUMM_CHEMO",
                   "DX_HORMONE_STARTED_DAYS", "RX_SUMM_HORMONE", "DX_IMMUNO_STARTED_DAYS", "RX_SUMM_IMMUNOTHERAPY",
                   "RX_SUMM_TRNSPLNT_ENDO", "RX_SUMM_SYSTEMIC_SUR_SEQ", "DX_OTHER_STARTED_DAYS", "RX_SUMM_OTHER",
                   "PALLIATIVE_CARE", "RX_SUMM_TREATMENT_STATUS", "PUF_30_DAY_MORT_CD", "PUF_90_DAY_MORT_CD",
                   "DX_LASTCONTACT_DEATH_MONTHS", "PUF_VITAL_STATUS", "RX_HOSP_SURG_PRIM_SITE", "RX_HOSP_CHEMO",
                   "RX_HOSP_IMMUNOTHERAPY", "RX_HOSP_HORMONE", "RX_HOSP_OTHER", "PUF_MULT_SOURCE", "REFERENCE_DATE_FLAG",
                   "RX_SUMM_SCOPE_REG_LN_2012", "RX_HOSP_DXSTG_PROC", "PALLIATIVE_CARE_HOSP", "TUMOR_SIZE_SUMMARY",
                   "METS_AT_DX_OTHER", "METS_AT_DX_DISTANT_LN", "METS_AT_DX_BONE", "METS_AT_DX_BRAIN",
                   "METS_AT_DX_LIVER", "METS_AT_DX_LUNG", "NO_HSD_QUAR_16", "MED_INC_QUAR_16", "MEDICAID_EXPN_CODE")
#Read in data for each subsite
lip <- read_fwf('NCDBPUF_Lip.3.2016.0.dat', 
                       fwf_widths(col.width, col_names = col.names.abr),
                       col_types = cols(.default = col_character()))
melanoma <- read_fwf('NCDBPUF_Melanoma.3.2016.0.dat', 
                       fwf_widths(col.width, col_names = col.names.abr),
                       col_types = cols(.default = col_character()))
                       
skin <- read_fwf('NCDBPUF_OtSkin.3.2016.0.dat', 
                       fwf_widths(col.width, col_names = col.names.abr),
                       col_types = cols(.default = col_character()))
hodgextr <- read_fwf('NCDBPUF_HodgExtr.3.2016.0.dat', 
                       fwf_widths(col.width, col_names = col.names.abr),
                       col_types = cols(.default = col_character()))
hodgndal <- read_fwf('NCDBPUF_HodgNdal.3.2016.0.dat', 
                       fwf_widths(col.width, col_names = col.names.abr),
                       col_types = cols(.default = col_character()))
NHLndal <- read_fwf('NCDBPUF_NHLNdal.3.2016.0.dat', 
                       fwf_widths(col.width, col_names = col.names.abr),
                       col_types = cols(.default = col_character()))
NHLextr <- read_fwf('NCDBPUF_NHLExtr.3.2016.0.dat', 
                       fwf_widths(col.width, col_names = col.names.abr),
                       col_types = cols(.default = col_character()))
breast <-  read_fwf('NCDBPUF_Breast.3.2016.0.dat', 
                       fwf_widths(col.width, col_names = col.names.abr),
                       col_types = cols(.default = col_character()))
vulva <-  read_fwf('NCDBPUF_Vulva.3.2016.0.dat', 
                       fwf_widths(col.width, col_names = col.names.abr),
                       col_types = cols(.default = col_character()))
vagina <-  read_fwf('NCDBPUF_Vagina.3.2016.0.dat', 
                       fwf_widths(col.width, col_names = col.names.abr),
                       col_types = cols(.default = col_character()))
penis <-  read_fwf('NCDBPUF_Penis.3.2016.0.dat', 
                       fwf_widths(col.width, col_names = col.names.abr),
                       col_types = cols(.default = col_character()))
otleuk <- read_fwf('NCDBPUF_OtLeuk.3.2016.0.dat', 
                       fwf_widths(col.width, col_names = col.names.abr),
                       col_types = cols(.default = col_character()))
  
otheracuteleuk  <- read_fwf('NCDBPUF_OtAcLeuk.3.2016.0.dat', 
                       fwf_widths(col.width, col_names = col.names.abr),
                       col_types = cols(.default = col_character()))
  
ALL  <- read_fwf('NCDBPUF_ALymLeuk.3.2016.0.dat', 
                       fwf_widths(col.width, col_names = col.names.abr),
                       col_types = cols(.default = col_character()))
#Combine data for all subsites
dat <- bind_rows(lip, melanoma, skin, hodgextr, hodgndal, NHLndal, breast, 
                 vulva, vagina, penis, NHLextr, otleuk, otheracuteleuk, ALL)
rm(lip, melanoma, skin, hodgextr, hodgndal, NHLndal, breast, vulva, vagina, 
   penis, NHLextr, otleuk, otheracuteleuk, ALL)
prim_site_text <- data_frame(PRIMARY_SITE = c(
#NHL sites
"C000", 
"C001", 
"C002", 
"C003", 
"C004", 
"C005", 
"C006", 
"C008",
"C009", 
"C019", 
"C020", 
"C021",
"C022", 
"C023", 
"C024", 
"C028", 
"C029",
"C030",
"C031",
"C039", 
"C040", 
"C041", 
"C048",
"C049", 
"C050", 
"C051", 
"C052", 
"C058", 
"C059",
"C060", 
"C061", 
"C062", 
"C068", 
"C069", 
"C079",  
"C098",
"C099",
"C111",
"C142",
"C300",
"C379",
"C420",
"C422",
"C424",
#skin/melanoma
                                 "C440", "C441", "C442", "C443", "C444", "C445",
                                 "C446", "C447", "C448", "C449",
                                 
                                 #breast - nipple
                                 "C500",
                                 
                                 #vagina/vulva
                                 "C510", "C511", "C512", "C518", "C519", "C529",
                                 
                                 #penis
                                 "C600", "C601", "C602", "C608", "C609", "C639",
"C770",
"C771",
"C772",
"C773",
"C774",
"C775",
"C778",
"C779"),
SITE_TEXT = c(
"C00.0 External Lip: Upper NOS",
"C00.1 External Lip: Lower NOS",
"C00.2 External Lip: NOS",
"C00.3 Lip: Upper Mucosa",
"C00.4 Lip: Lower Mucosa",
"C00.5 Lip: Mucosa NOS",
"C00.6 Lip: Commissure",
"C00.8 Lip: Overlapping",
"C00.9 Lip NOS",
"C01.9 Tongue: Base NOS",
"C02.0 Tongue: Dorsal NOS",
"C02.1 Tongue: Border, Tip",
"C02.2 Tongue: Ventral NOS",
"C02.3 Tongue: Anterior NOS",
"C02.4 Lingual Tonsil",
"C02.8 Tongue: Overlapping",
"C02.9 Tongue: NOS",
"C03.0 Gum: Upper",
"C03.1 Gum: Lower",
"C03.9 Gum NOS",
"C04.0 Mouth: Anterior Floor",
"C04.1 Mouth: Lateral Floor",
"C04.8 Mouth: Overlapping Floor",
"C04.9 Floor of Mouth NOS",
"C05.0 Hard Palate",
"C05.1 Soft Palate NOS",
"C05.2 Uvula",
"C05.8 Palate: Overlapping",
"C05.9 Palate NOS",
"C06.0 Cheek Mucosa",
"C06.1 Mouth: Vestibule",
"C06.2 Retromolar Area",
"C06.8 Mouth: Other Overlapping",
"C06.9 Mouth NOS",
"C07.9 Parotid Gland",
  "C09.8 Tonsil: Overlapping",
  "C09.9 Tonsil NOS",
  "C11.1 Nasopharynx: Poster Wall", 
  "C14.2 Waldeyer Ring",
  "C30.0 Nasal Cavity",
  "C37.9 Thymus",
"C42.0 Blood",
  "C42.2 Spleen",
"C42.4 Hematopoietic NOS",
 #skin
"C44.0 Skin of lip, NOS",
"C44.1 Eyelid",
"C44.2 External ear",
"C44.3 Skin of ear and unspecified parts of face",
"C44.4 Skin of scalp and neck",
"C44.5 Skin of trunk",
"C44.6 Skin of upper limb and shoulder",
"C44.7 Skin of lower limb and hip",
"C44.8 Overlapping lesion of skin",
"C44.9 Skin, NOS", 
#breast
"C50.0 Nipple",
#vulva/vagina
"C51.0 Labium majus",
"C51.1 Labium minus",
"C51.2 Clitoris",
"C51.8 Overlapping lesion of vulva",
"C51.9 Vulva, NOS",
"C52.9 Vagina, NOS",
#penis
"C60.0 Prepuce",
"C60.1 Glans penis",
"C60.2 Body of penis",
"C60.8 Overlapping lesion of penis",
"C60.9 Penis",
"C63.2 Scrotum, NOS",
  "C77.0 Lymph Nodes: HeadFaceNeck",
  "C77.1 Intrathoracic Lymph Nodes",
  "C77.2 Intra-abdominal LymphNodes",
  "C77.3 Lymph Nodes of axilla or arm ",
  "C77.4 Lymph Nodes: Leg",
  "C77.5 Pelvic Lymph Nodes",
  "C77.8 Lymph Nodes: multiple region",
  "C77.9 Lymph Node NOS"))
dat <- merge(dat, prim_site_text, by = "PRIMARY_SITE", all.x = TRUE) 
rm(prim_site_text)
# convert numeric variables from character class to numeric class
num_vars <- c("AGE", "CROWFLY", "TUMOR_SIZE", "DX_STAGING_PROC_DAYS", "DX_RX_STARTED_DAYS", "DX_SURG_STARTED_DAYS",
              "DX_DEFSURG_STARTED_DAYS", "SURG_DISCHARGE_DAYS", "DX_RAD_STARTED_DAYS",  "RAD_REGIONAL_DOSE_CGY",
              "RAD_BOOST_DOSE_CGY", "RAD_ELAPSED_RX_DAYS", "DX_SYSTEMIC_STARTED_DAYS", "DX_CHEMO_STARTED_DAYS", 
              "DX_HORMONE_STARTED_DAYS", "DX_OTHER_STARTED_DAYS", "DX_LASTCONTACT_DEATH_MONTHS",
              "RAD_NUM_TREAT_VOL")
dat[num_vars] <- lapply(dat[num_vars], as.numeric)
# convert factor variables from character class to factor class
vars <- names(dat)
fact_vars <- vars[!(vars %in% num_vars)] # basically all of the non-numerics
dat[fact_vars] <- lapply(dat[fact_vars], as.character)
dat[fact_vars] <- lapply(dat[fact_vars], as.factor)
dat <- dat %>%
        mutate(FACILITY_TYPE_F = fct_recode(FACILITY_TYPE_CD,
                                            "Community Cancer Program" = "1",
                                            "Comprehensive Comm Ca Program" = "2",
                                            "Academic/Research Program" = "3",
                                            "Integrated Network Ca Program" = "4",
                                            "Other" = "9")) %>%
        mutate(FACILITY_LOCATION_F = fct_recode(FACILITY_LOCATION_CD,
                                            "New England" = "1",
                                            "Middle Atlantic" = "2",
                                            "South Atlantic" = "3",
                                            "East North Central" = "4",
                                            "East South Central" = "5",
                                            "West North Central" = "6",
                                            "West South Central" = "7",
                                            "Mountain" = "8",
                                            "Pacific" = "9",
                                            "out of US" = "0")) %>%
        mutate(FACILITY_GEOGRAPHY = fct_collapse(FACILITY_LOCATION_CD,
                                                 "Northeast" = c("1", "2"),
                                                 "South" = c("3", "7"),
                                                 "Midwest" = c("4", "5", "6"),
                                                 "West" = c("8", "9"))) %>%
        mutate(AGE_F = cut(AGE, c(0, 54, 64, 74, 100))) %>%
        mutate(AGE_40 = cut(AGE, c(0, 40, 100))) %>%
        mutate(SEX_F = fct_recode(SEX,
                                "Male" = "1",
                                "Female" = "2")) %>%
        mutate(RACE_F = fct_collapse(RACE,
                                "White" = c("01"),
                                "Black" = c("02"),
                                "Asian" = c("04", "05", "06", "07", "08", "10", "11", "12", "13", "14", "15",
                                            "16", "17", "20", "21", "22", "25", "26", "27", "28", "30", "31",
                                            "32", "96", "97"),
                                "Other/Unk" = c("03", "98", "99"))) %>%
        mutate(HISPANIC = fct_collapse(SPANISH_HISPANIC_ORIGIN,
                                       "Yes" = c("1", "2", "3", "4", "5", "6", "7", "8"),
                                       "No" = c("0"),
                                       "Unknown" = c("9"))) %>%
        mutate(INSURANCE_F = fct_recode(INSURANCE_STATUS,
                                         "None" = "0",
                                         "Private" = "1",
                                         "Medicaid" = "2",
                                         "Medicare" = "3",
                                         "Other Government" = "4",
                                         "Unknown" = "9")) %>%
        mutate(INSURANCE_F = fct_relevel(INSURANCE_F,
                                         "Private")) %>%
        mutate(INCOME_F = fct_recode(MED_INC_QUAR_12,
                                      "Less than $38,000" = "1",
                                      "$38,000 - $47,999" = "2",
                                      "$48,000 - $62,999" = "3",
                                      "$63,000 +" = "4")) %>%
        mutate(EDUCATION_F = fct_recode(NO_HSD_QUAR_12,
                                        "21% or more" = "1",
                                        "13 - 20.9%" = "2",
                                        "7 - 12.9%" = "3",
                                        "Less than 7%" = "4")) %>%
        mutate(U_R_F = fct_collapse(UR_CD_13,
                                    "Metro" = c("1", "2", "3"),
                                    "Urban" = c("4", "5", "6", "7"),
                                    "Rural" = c("8", "9"))) %>%
        mutate(CLASS_OF_CASE_F = fct_collapse(CLASS_OF_CASE,
                                              All_Part_Prim = c("10", "11", "12", "13",
                                                                "14", "20", "21", "22"),
                                              Other_Facility = c("00"))) %>%
        mutate(GRADE_F = fct_recode(GRADE,
                                  "Gr I: Well Diff" = "1",
                                  "Gr II: Mod Diff" = "2",
                                  "Gr III: Poor Diff" = "3",
                                  "Gr IV: Undiff/Anaplastic" = "4",
                                  "NA/Unkown" = "9")) %>%
        mutate(HISTOLOGY_F = fct_infreq(HISTOLOGY)) %>%
        mutate(HISTOLOGY_F = factor(HISTOLOGY_F)) %>%
        mutate(HISTOLOGY_F_LIM = fct_lump(HISTOLOGY_F, prop = 0.05)) %>%
        mutate(TNM_CLIN_T = fct_recode(TNM_CLIN_T,
                                       "N_A" = "88")) %>%
        mutate(TNM_CLIN_T = fct_relevel(TNM_CLIN_T,
                                        "1")) %>%
        mutate(TNM_CLIN_N = fct_recode(TNM_CLIN_N,
                                       "N_A" = "88")) %>%
        mutate(TNM_CLIN_M = fct_recode(TNM_CLIN_M,
                                       "N_A" = "88")) %>%
        mutate(TNM_PATH_T = fct_recode(TNM_PATH_T,
                                       "N_A" = "88")) %>%
        mutate(TNM_PATH_T = fct_relevel(TNM_PATH_T,
                                        "1")) %>%
        mutate(TNM_PATH_N = fct_recode(TNM_PATH_N,
                                       "N_A" = "88")) %>%
        mutate(TNM_PATH_M = fct_recode(TNM_PATH_M,
                                       "N_A" = "88")) %>%
        mutate(TNM_CLIN_STAGE_GROUP = fct_recode(TNM_CLIN_STAGE_GROUP,
                                       "N_A" = "88")) %>%
        mutate(TNM_PATH_STAGE_GROUP = fct_recode(TNM_PATH_STAGE_GROUP,
                                       "N_A" = "88")) %>%
        mutate(MARGINS = fct_recode(RX_SUMM_SURGICAL_MARGINS,
                                    "No Residual" = "0",
                                    "Residual, NOS" = "1",
                                    "Microscopic Resid" = "2",
                                    "Macroscopic Resid" = "3",
                                    "Not evaluable" = "7",
                                    "No surg" = "8",
                                    "Unknown" = "9")) %>%
        mutate(MARGINS_YN = fct_collapse(RX_SUMM_SURGICAL_MARGINS,
                                         "Yes" = c("1", "2", "3"),
                                         "No" = c("0"),
                                         "No surg/Unk/NA" = c("7", "8", "9"))) %>%
        mutate(READM_HOSP_30_DAYS_F = fct_recode(READM_HOSP_30_DAYS,
                                                 "No_Surg_or_No_Readmit" = "0",
                                                 "Unplan_Readmit_Same" = "1",
                                                 "Plan_Readmit_Same" = "2",
                                                 "PlanUnplan_Same" = "3",
                                                 "Unknown" = "4")) %>%
        mutate(RX_SUMM_RADIATION_F = fct_recode(RX_SUMM_RADIATION,
                                                "None" = "0",
                                                "Beam Radiation" = "1",
                                                "Radioactive Implants" = "2",
                                                "Radioisotopes" = "3",
                                                "Beam + Imp or Isotopes" = "4",
                                                "Radiation, NOS" = "5",
                                                "Unknown" = "9")) %>%
        mutate(PUF_30_DAY_MORT_CD_F = fct_recode(PUF_30_DAY_MORT_CD,
                                                 "Alive_30" = "0",
                                                 "Dead_30" = "1",
                                                 "Unknown" = "9")) %>%
        mutate(PUF_90_DAY_MORT_CD_F = fct_recode(PUF_90_DAY_MORT_CD,
                                                 "Alive_90" = "0",
                                                 "Dead_90" = "1",
                                                 "Unknown" = "9")) %>%
        mutate(LYMPH_VASCULAR_INVASION_F = fct_recode(LYMPH_VASCULAR_INVASION,
                                                      "Neg_LymphVasc_Inv" = "0",
                                                      "Pos_LumphVasc_Inv" = "1",
                                                      "N_A" = "8",
                                                      "Unknown" = "9")) %>%
        mutate(RX_HOSP_SURG_APPR_2010_F = fct_recode(RX_HOSP_SURG_APPR_2010,
                                                     "No_Surg" = "0",
                                                     "Robot_Assist" = "1",
                                                     "Robot_to_Open" = "2",
                                                     "Endo_Lap" = "3",
                                                     "Endo_Lap_to_Open" = "4",
                                                     "Open_Unknown" = "5",
                                                     "Unknown" = "9")) %>%
        mutate(All = "All") %>%
        mutate(All = factor(All)) %>%
        mutate(REASON_FOR_NO_SURGERY_F = fct_recode(REASON_FOR_NO_SURGERY,
                                                    "Surg performed" = "0",
                                                    "Surg not recommended" = "1",
                                                    "No surg due to pt factors" = "2",
                                                    "No surg, pt died" = "5",
                                                    "Surg rec, not done" = "6",
                                                    "Surg rec, pt refused" = "7",
                                                    "Surg rec, unk if done" = "8",
                                                    "Unknown" = "9")) %>%
        mutate(SURGERY_YN = ifelse(REASON_FOR_NO_SURGERY == "0",
                                   "Yes",
                                   ifelse(REASON_FOR_NO_SURGERY == "9",
                                          "Ukn",
                                          "No"))) %>%
        mutate(SURG_TF = case_when(SURGERY_YN == "Yes" ~ TRUE,
                             SURGERY_YN == "No" ~ FALSE,
                             TRUE ~ NA))  %>%
        mutate(REASON_FOR_NO_RADIATION_F = fct_recode(REASON_FOR_NO_RADIATION,
                                                    "Rad performed" = "0",
                                                    "Rad not recommended" = "1",
                                                    "No Rad due to pt factors" = "2",
                                                    "No Rad, pt died" = "5",
                                                    "Rad rec, not done" = "6",
                                                    "Rad rec, pt refused" = "7",
                                                    "Rad rec, unk if done" = "8",
                                                    "Unknown" = "9")) %>%
        mutate(RADIATION_YN = ifelse(REASON_FOR_NO_RADIATION == "0",
                                   "Yes",
                                   ifelse(REASON_FOR_NO_RADIATION == "9",
                                          NA,
                                          "No"))) %>%
        mutate(SURGRAD_SEQ_F = fct_recode(RX_SUMM_SURGRAD_SEQ,
                                                   "None or Surg or Rad" = "0",
                                                   "Rad before Surg" = "2",
                                                   "Surg before Rad" = "3",
                                                   "Rad before and after Surg" = "4",
                                                   "Intraop Rad" = "5",
                                                   "Intraop Rad plus other" = "6",
                                                   "Unknown" = "9")) %>%
        mutate(SURG_RAD_SEQ = ifelse(SURGERY_YN == "Yes" & RX_SUMM_SURGRAD_SEQ == "0",
                                     "Surg Alone",
                                     ifelse(RADIATION_YN == "Yes" & RX_SUMM_SURGRAD_SEQ == "0",
                                            "Rad Alone",
                                            ifelse(SURGERY_YN == "No" & RADIATION_YN == "No" & RX_SUMM_SURGRAD_SEQ == "0",
                                                   "No Treatment",
                                                   ifelse(RX_SUMM_SURGRAD_SEQ == "2",
                                                          "Rad then Surg",
                                                          ifelse(RX_SUMM_SURGRAD_SEQ == "3",
                                                                 "Surg then Rad",
                                                                 ifelse(RX_SUMM_SURGRAD_SEQ == "4",
                                                                        "Rad before and after Surg",
                                                                        "Other"))))))) %>%
        mutate(SURG_RAD_SEQ = fct_relevel(SURG_RAD_SEQ,
                                          "Surg Alone",
                                          "Surg then Rad",
                                          "Rad Alone")) %>%
        mutate(CHEMO_YN = fct_collapse(RX_SUMM_CHEMO,
                                       "No" = c("00", "82", "85", "86", "87"),
                                       "Yes" = c("01", "02", "03"),
                                       "Ukn" = c("88", "99"))) %>%
        mutate(IMMUNO_YN = fct_collapse(RX_SUMM_IMMUNOTHERAPY,
                                       "No" = c("00", "82", "85", "86", "87"),
                                       "Yes" = c("01"),
                                       "Ukn" = c("88", "99"))) %>%
        mutate(SURG_RAD_SEQ_C = ifelse(SURGERY_YN == "Yes" & RX_SUMM_SURGRAD_SEQ == "0" & CHEMO_YN == "No",
                                     "Surg, No rad, No Chemo",
                                     ifelse(RADIATION_YN == "Yes" & RX_SUMM_SURGRAD_SEQ == "0" & CHEMO_YN == "No",
                                            "Rad, No Surg, No Chemo",
                                            ifelse(SURGERY_YN == "No" & RADIATION_YN == "No" & RX_SUMM_SURGRAD_SEQ == "0" & CHEMO_YN == "No",
                                                   "No Surg, No Rad, No Chemo",
                                                   ifelse(RX_SUMM_SURGRAD_SEQ == "2" & CHEMO_YN == "No",
                                                          "Rad then Surg, No Chemo",
                                                          ifelse(RX_SUMM_SURGRAD_SEQ == "3" & CHEMO_YN == "No",
                                                                 "Surg then Rad, No Chemo",
                                                                 ifelse(RX_SUMM_SURGRAD_SEQ == "4" & CHEMO_YN == "No",
                                                                        "Rad before and after Surg, No Chemo",
                                ifelse(SURGERY_YN == "Yes" & RX_SUMM_SURGRAD_SEQ == "0" & CHEMO_YN == "Yes",
                                       "Surg, No rad, Yes Chemo",
                                       ifelse(RADIATION_YN == "Yes" & RX_SUMM_SURGRAD_SEQ == "0" & CHEMO_YN == "Yes",
                                              "Rad, No Surg, Yes Chemo",
                                              ifelse(SURGERY_YN == "No" & RADIATION_YN == "No" & RX_SUMM_SURGRAD_SEQ == "0" & CHEMO_YN == "Yes",
                                                     "No Surg, No Rad, Yes Chemo",
                                                     ifelse(RX_SUMM_SURGRAD_SEQ == "2" & CHEMO_YN == "Yes",
                                                            "Rad then Surg, Yes Chemo",
                                                            ifelse(RX_SUMM_SURGRAD_SEQ == "3" & CHEMO_YN == "Yes",
                                                                   "Surg then Rad, Yes Chemo",
                                                                   ifelse(RX_SUMM_SURGRAD_SEQ == "4" & CHEMO_YN == "Yes",
                                                                          "Rad before and after Surg, Yes Chemo",
                                                                          "Other"))))))))))))) %>%
        mutate(SURG_RAD_SEQ_C = fct_infreq(SURG_RAD_SEQ_C)) %>%
        mutate(T_SIZE = as.numeric(TUMOR_SIZE)) %>%
        mutate(T_SIZE = ifelse(T_SIZE == 0,
                                "No Tumor",
                                ifelse(T_SIZE > 0 & T_SIZE < 10 | T_SIZE == 991,
                                       "< 1 cm",
                                       ifelse(T_SIZE >= 10 & T_SIZE < 20 | T_SIZE == 992,
                                              "1-2 cm",
                                              ifelse(T_SIZE >= 20 & T_SIZE < 30 | T_SIZE == 993,
                                                     "2-3 cm",
                                                     ifelse(T_SIZE >= 30 & T_SIZE < 40 | T_SIZE == 994,
                                                            "3-4 cm",
                                                            ifelse(T_SIZE >= 40 & T_SIZE < 50 | T_SIZE == 995,
                                                                   "4-5 cm",
                                                                   ifelse(T_SIZE >= 50 & T_SIZE < 60 | T_SIZE == 996,
                                                                          "5-6 cm",
                                                                          ifelse(T_SIZE >= 60 & T_SIZE <= 987 |
                                                                                         T_SIZE == 980 | T_SIZE == 989 |
                                                                                         T_SIZE == 997,
                                                                          ">6 cm",
                                                                          ifelse(T_SIZE == 988 | T_SIZE == 999,
                                                                                 "NA_unk",
                                                                                 "Microscopic focus")))))))))) %>%
        mutate(T_SIZE = factor(T_SIZE)) %>%
        mutate(T_SIZE = fct_relevel(T_SIZE,
                                     "No Tumor", "Microscopic focus", "< 1 cm", "1-2 cm", "2-3 cm", "3-4 cm",
                                       "4-5 cm", "5-6 cm", ">6 cm", "NA_unk")) %>%
        mutate(mets_at_dx = case_when(CS_METS_DX_LUNG == "1" ~ "Lung",
                                      CS_METS_DX_BONE == "1" ~ "Bone",
                                      CS_METS_DX_BRAIN == "1" ~ "Brain",
                                      CS_METS_DX_LIVER == "1" ~ "Liver",
                                      TRUE ~ "None/Other/Unk/NA")) %>%
        mutate(MEDICAID_EXPN_CODE = fct_recode(MEDICAID_EXPN_CODE,
                                               "Non-Expansion State" = "0",
                                               "Jan 2014 Expansion States" = "1",
                                               "Early Expansion States (2010-13)" = "2",
                                               "Late Expansion States (> Jan 2014)" = "3",
                                               "Suppressed for Ages 0 - 39" = "9"))  %>%
        mutate(EXPN_GROUP =  case_when(MEDICAID_EXPN_CODE  %in% c("Jan 2014 Expansion States") & 
                                         YEAR_OF_DIAGNOSIS %in% c("2014", "2015") ~ "Post-Expansion",
                                       
                                       MEDICAID_EXPN_CODE  %in% c("Jan 2014 Expansion States") & 
                                         YEAR_OF_DIAGNOSIS %in% 
                                          c("2004", "2005", "2006", "2007", "2008", 
                                            "2009", "2010", "2011", "2012", "2013") ~ "Pre-Expansion",
               
                                       MEDICAID_EXPN_CODE  %in% c("Early Expansion States (2010-13)") & 
                                         YEAR_OF_DIAGNOSIS %in% c("2010", "2011", "2012", "2013", "2014", "2015") ~ "Post-Expansion",
                                       
                                        MEDICAID_EXPN_CODE  %in% c("Early Expansion States (2010-13)") & 
                                         YEAR_OF_DIAGNOSIS %in% c("2004", "2005", "2006", "2007", "2008", "2009") ~ "Pre-Expansion",
                                       MEDICAID_EXPN_CODE %in% c("Non-Expansion State") ~ "Pre-Expansion",
                                       MEDICAID_EXPN_CODE %in% c("Late Expansion States (> Jan 2014)") ~ "Pre-Expansion",
                    
                                       MEDICAID_EXPN_CODE %in% c("Late Expansion States (> Jan 2014)") & 
                                        YEAR_OF_DIAGNOSIS %in% c("2014", "2015") ~ "Exclude",
                                       
                                       MEDICAID_EXPN_CODE == "Suppressed for Ages 0 - 39" ~ "Exclude")) %>%
  
  mutate(pre_2014 = YEAR_OF_DIAGNOSIS %in% c("2004", "2005", "2006", "2007", "2008", 
                                            "2009", "2010", "2011", "2012", "2013")) %>%
  
  mutate(mets_at_dx_F = ifelse(mets_at_dx == "None/Other/Unk/NA", FALSE, TRUE)) %>% 
  
  mutate(Tx_YN = ifelse(SURG_RAD_SEQ == "No Treatment" & CHEMO_YN == "No" & 
                          IMMUNO_YN == "No", FALSE, 
                        ifelse(CHEMO_YN == "Ukn", NA, 
                               TRUE)))
fact_vars_2 <- c("FACILITY_TYPE_F", "FACILITY_LOCATION_F", "AGE_F", "SEX_F", "RACE_F",
                 "HISPANIC", "INSURANCE_F", "INCOME_F", "EDUCATION_F", "U_R_F",
                 "CDCC_TOTAL_BEST", "CLASS_OF_CASE_F", "YEAR_OF_DIAGNOSIS", "PRIMARY_SITE", "HISTOLOGY",
                 "BEHAVIOR", "GRADE_F", "TNM_CLIN_T", "TNM_CLIN_N", "TNM_CLIN_M",
                 "TNM_CLIN_STAGE_GROUP", "TNM_PATH_T", "TNM_PATH_N", "TNM_PATH_M", "TNM_PATH_STAGE_GROUP",
                 "MARGINS", "READM_HOSP_30_DAYS_F", "RX_SUMM_RADIATION_F", "PUF_30_DAY_MORT_CD_F",
                 "PUF_90_DAY_MORT_CD_F", "LYMPH_VASCULAR_INVASION_F", "RX_HOSP_SURG_APPR_2010_F", "mets_at_dx")
dat <- dat %>%
        mutate_at(fact_vars_2, funs(factor(.)))

Extract Data of Interest

# Non-Hodgkin Lymphoma Sites
site_code <- c( 
#additional sites
 #lip  
  "C000", "C001", "C002", "C003", "C004", "C005","C006", "C008","C009",
                                  
                                 
#skin/melanoma
  "C440", "C441", "C442", "C443", "C444", "C445", "C446", "C447", "C448", "C449",
                                 
 #breast - nipple
  "C500",
                                 
#vagina/vulva
  "C510", "C511", "C512", "C518", "C519", "C529",
                                 
#penis
 "C600", "C601", "C602", "C608", "C609", "C639")
#mycosis fungoides, Sezary syndrome, subcutaneous panniculitis-like T-cell lymphoma,
#cutaneous T-cell lymphoma, NOS, primary cutaneous CD30+T-cell lymphoma, 
#NK/T-cell lymphoma, primary cutaneous gamma-delta T-cell lymphoma, 
#and blastic NK cell lymphoma, respectively
#"9700" = Mycosis Fungoides
  # pagetoid reticulosis
#"9701" = Sezary Syndrome
  # Sezary disease
#"9708" = Subcutaneous panniculitislike T-cell lymphoma
#"9709" = Cutaneous T-cell lymphoma, NOS 
  # Cutaneous lymphoma, NOS (C44._); Primary cutaneous CD4-positive small/medium
  # T-cell lymphoma; Primary cutaneous CD8-positive aggressive
  # epidermotropic cytotoxic T-cell lymphoma
#"9718" = Primary cutaneous CD30+ T-cell lymphoproliferative disorder 
  # Lymphomatoid papulosis (C44._), Primary cutaneous anaplastic large cell,
  # lymphoma (C44._), Primary cutaneous CD30+ large T-cell lymphoma (C44._)
#"9726" = Primary cutaneous gamma-delta T-cell lymphoma
histo_code <- c("9726")
behavior_code <- c("3")
data <- dat %>%
        filter(BEHAVIOR %in% behavior_code) %>%
        filter(PRIMARY_SITE %in% site_code) %>%
        filter(HISTOLOGY %in% histo_code) %>%
        #filter(AGE >= 18) %>%
        filter(is.na(PUF_VITAL_STATUS) == FALSE) %>%
        filter(is.na(DX_LASTCONTACT_DEATH_MONTHS) == FALSE)  %>%
        filter(SEQUENCE_NUMBER == "00") 
#file_path <- c("/Users/beastatlife/Google Drive/Penn/Research/Barbieri/NCDB")
#save(data,
#      file = paste0(file_path, "/CTCL_data.Rda"))
#load("MF_data.Rda")

Data including skin tumors was obtained from the NCBD on October 7, 2019. Cases that were included in this analysis were those with:

  1. Site codes: C000, C001, C002, C003, C004, C005, C006, C008, C009, C440, C441, C442, C443, C444, C445, C446, C447, C448, C449, C500, C510, C511, C512, C518, C519, C529, C600, C601, C602, C608, C609, C639
  2. Histology codes: 9726
  3. Behavior codes: 3

Patients were excluded if they didn’t have values for either follow up or vital status.

Patients were excluded if they had surgery to a distant site using RX_SUMM_SURG_OTH_REGDIS. This was done to avoid confounding of different surgical procedures. We are only interested in surgery at the primary site. These distant site surgeries were being counted in the surgery/radiation sequence and thus to simplify analysis they were removed.

data %>%
        CreateTableOne(data = .,
                     vars = c("RX_SUMM_SURG_OTH_REGDIS"),
                     includeNA = TRUE) %>%
        print(.,
              showAllLevels = TRUE)
                             
                              level Overall    
  n                                 48         
  RX_SUMM_SURG_OTH_REGDIS (%) 0     48 (100.0) 
                              1      0 (  0.0) 
                              2      0 (  0.0) 
                              3      0 (  0.0) 
                              4      0 (  0.0) 
                              5      0 (  0.0) 
                              9      0 (  0.0) 
data <- data %>%
        filter(RX_SUMM_SURG_OTH_REGDIS == "0") 

Race was grouped as white, black, asian, other/unknown Stage was grouped into 0, I, II, III, IV, NA_Unknown, stage 0 was removed Whether surgery was performed was based on the REASON_FOR_NO_SURGERY variable. The SURGERY_YN variable was classified as ‘Yes’, ‘No’, or ‘Unknown’.

Whether radiation was performed was based on the REASON_FOR_NO_RADIATION variable. The RADIATION_YN variable was classified as ‘Yes’, ‘No’, or ‘Unknown’.

Table of variables for all cases:

data <- data %>% droplevels()
p_table(data,
        vars = c("FACILITY_TYPE_F", "FACILITY_LOCATION_F", "FACILITY_GEOGRAPHY",  "AGE", "AGE_F", "AGE_40",
                 "SEX_F", "RACE_F", "HISPANIC", "INSURANCE_F", 
                 "INCOME_F", "EDUCATION_F", "U_R_F", "CROWFLY", "CDCC_TOTAL_BEST",
                 "SITE_TEXT",  "HISTOLOGY", "BEHAVIOR", "GRADE_F", 
                 "DX_STAGING_PROC_DAYS", "TNM_CLIN_T", "TNM_CLIN_N", "TNM_CLIN_M",
                 "TNM_CLIN_STAGE_GROUP", "TNM_PATH_T", "TNM_PATH_N", "TNM_PATH_M",
                 "TNM_PATH_STAGE_GROUP", "DX_RX_STARTED_DAYS", "DX_SURG_STARTED_DAYS",
                 "DX_DEFSURG_STARTED_DAYS", "MARGINS", "MARGINS_YN", "SURG_DISCHARGE_DAYS",
                 "READM_HOSP_30_DAYS_F", "RX_SUMM_RADIATION_F", "PUF_30_DAY_MORT_CD_F",
                 "PUF_90_DAY_MORT_CD_F", "DX_LASTCONTACT_DEATH_MONTHS", 
                 "LYMPH_VASCULAR_INVASION_F", "RX_HOSP_SURG_APPR_2010_F", "SURG_RAD_SEQ",
                 "SURG_RAD_SEQ_C", "SURGERY_YN", "RADIATION_YN", "CHEMO_YN", "IMMUNO_YN", "Tx_YN", "mets_at_dx",
                 "MEDICAID_EXPN_CODE", "EXPN_GROUP", "YEAR_OF_DIAGNOSIS"))
level Overall
n 48
FACILITY_TYPE_F (%) Community Cancer Program 1 ( 2.1)
Comprehensive Comm Ca Program 13 ( 27.1)
Academic/Research Program 20 ( 41.7)
Integrated Network Ca Program 3 ( 6.2)
NA 11 ( 22.9)
FACILITY_LOCATION_F (%) New England 5 ( 10.4)
Middle Atlantic 4 ( 8.3)
South Atlantic 9 ( 18.8)
East North Central 7 ( 14.6)
East South Central 1 ( 2.1)
West North Central 2 ( 4.2)
West South Central 1 ( 2.1)
Mountain 1 ( 2.1)
Pacific 7 ( 14.6)
NA 11 ( 22.9)
FACILITY_GEOGRAPHY (%) Northeast 9 ( 18.8)
South 10 ( 20.8)
Midwest 10 ( 20.8)
West 8 ( 16.7)
NA 11 ( 22.9)
AGE (mean (sd)) 54.12 (17.85)
AGE_F (%) (0,54] 22 ( 45.8)
(54,64] 12 ( 25.0)
(64,74] 5 ( 10.4)
(74,100] 9 ( 18.8)
AGE_40 (%) (0,40] 12 ( 25.0)
(40,100] 36 ( 75.0)
SEX_F (%) Male 30 ( 62.5)
Female 18 ( 37.5)
RACE_F (%) White 38 ( 79.2)
Black 7 ( 14.6)
Other/Unk 2 ( 4.2)
Asian 1 ( 2.1)
HISPANIC (%) No 43 ( 89.6)
Yes 3 ( 6.2)
Unknown 2 ( 4.2)
INSURANCE_F (%) Private 29 ( 60.4)
None 2 ( 4.2)
Medicaid 3 ( 6.2)
Medicare 12 ( 25.0)
Other Government 1 ( 2.1)
Unknown 1 ( 2.1)
INCOME_F (%) Less than $38,000 10 ( 20.8)
$38,000 - $47,999 10 ( 20.8)
$48,000 - $62,999 14 ( 29.2)
$63,000 + 14 ( 29.2)
EDUCATION_F (%) 21% or more 6 ( 12.5)
13 - 20.9% 14 ( 29.2)
7 - 12.9% 15 ( 31.2)
Less than 7% 13 ( 27.1)
U_R_F (%) Metro 39 ( 81.2)
Urban 8 ( 16.7)
Rural 1 ( 2.1)
CROWFLY (mean (sd)) 40.32 (72.27)
CDCC_TOTAL_BEST (%) 0 40 ( 83.3)
1 8 ( 16.7)
SITE_TEXT (%) C44.3 Skin of ear and unspecified parts of face 2 ( 4.2)
C44.5 Skin of trunk 4 ( 8.3)
C44.6 Skin of upper limb and shoulder 2 ( 4.2)
C44.7 Skin of lower limb and hip 11 ( 22.9)
C44.8 Overlapping lesion of skin 3 ( 6.2)
C44.9 Skin, NOS 26 ( 54.2)
HISTOLOGY (%) 9726 48 (100.0)
BEHAVIOR (%) 3 48 (100.0)
GRADE_F (%) 5 48 (100.0)
DX_STAGING_PROC_DAYS (mean (sd)) 3.92 (15.33)
TNM_CLIN_T (%) N_A 44 ( 91.7)
NA 4 ( 8.3)
TNM_CLIN_N (%) N_A 44 ( 91.7)
NA 4 ( 8.3)
TNM_CLIN_M (%) N_A 44 ( 91.7)
NA 4 ( 8.3)
TNM_CLIN_STAGE_GROUP (%) 1 11 ( 22.9)
1A 8 ( 16.7)
1B 4 ( 8.3)
2B 3 ( 6.2)
3 2 ( 4.2)
3B 1 ( 2.1)
4 3 ( 6.2)
4A 8 ( 16.7)
4B 4 ( 8.3)
99 4 ( 8.3)
TNM_PATH_T (%) N_A 41 ( 85.4)
NA 7 ( 14.6)
TNM_PATH_N (%) N_A 41 ( 85.4)
NA 7 ( 14.6)
TNM_PATH_M (%) N_A 38 ( 79.2)
NA 10 ( 20.8)
TNM_PATH_STAGE_GROUP (%) 1 3 ( 6.2)
1B 2 ( 4.2)
3 2 ( 4.2)
3B 1 ( 2.1)
4A 4 ( 8.3)
99 21 ( 43.8)
NA 15 ( 31.2)
DX_RX_STARTED_DAYS (mean (sd)) 36.46 (38.49)
DX_SURG_STARTED_DAYS (mean (sd)) 7.17 (17.55)
DX_DEFSURG_STARTED_DAYS (mean (sd)) 7.17 (17.55)
MARGINS (%) No Residual 1 ( 2.1)
Not evaluable 1 ( 2.1)
No surg 42 ( 87.5)
Unknown 4 ( 8.3)
MARGINS_YN (%) No 1 ( 2.1)
No surg/Unk/NA 47 ( 97.9)
SURG_DISCHARGE_DAYS (mean (sd)) 25.50 (46.45)
READM_HOSP_30_DAYS_F (%) No_Surg_or_No_Readmit 47 ( 97.9)
9 1 ( 2.1)
RX_SUMM_RADIATION_F (%) None 39 ( 81.2)
Beam Radiation 9 ( 18.8)
PUF_30_DAY_MORT_CD_F (%) Alive_30 5 ( 10.4)
Unknown 1 ( 2.1)
NA 42 ( 87.5)
PUF_90_DAY_MORT_CD_F (%) Alive_90 5 ( 10.4)
Unknown 1 ( 2.1)
NA 42 ( 87.5)
DX_LASTCONTACT_DEATH_MONTHS (mean (sd)) 22.68 (24.83)
LYMPH_VASCULAR_INVASION_F (%) N_A 48 (100.0)
RX_HOSP_SURG_APPR_2010_F (%) No_Surg 42 ( 87.5)
Open_Unknown 6 ( 12.5)
SURG_RAD_SEQ (%) Surg Alone 4 ( 8.3)
Surg then Rad 2 ( 4.2)
Rad Alone 7 ( 14.6)
No Treatment 35 ( 72.9)
SURG_RAD_SEQ_C (%) Surg, No rad, No Chemo 2 ( 4.2)
Surg then Rad, Yes Chemo 2 ( 4.2)
Surg, No rad, Yes Chemo 2 ( 4.2)
No Surg, No Rad, Yes Chemo 21 ( 43.8)
No Surg, No Rad, No Chemo 14 ( 29.2)
Rad, No Surg, Yes Chemo 4 ( 8.3)
Rad, No Surg, No Chemo 3 ( 6.2)
SURGERY_YN (%) No 42 ( 87.5)
Yes 6 ( 12.5)
RADIATION_YN (%) No 39 ( 81.2)
Yes 9 ( 18.8)
CHEMO_YN (%) No 19 ( 39.6)
Yes 29 ( 60.4)
IMMUNO_YN (%) No 44 ( 91.7)
Yes 4 ( 8.3)
Tx_YN (%) FALSE 12 ( 25.0)
TRUE 36 ( 75.0)
mets_at_dx (%) None/Other/Unk/NA 48 (100.0)
MEDICAID_EXPN_CODE (%) Non-Expansion State 13 ( 27.1)
Jan 2014 Expansion States 13 ( 27.1)
Early Expansion States (2010-13) 8 ( 16.7)
Late Expansion States (> Jan 2014) 3 ( 6.2)
Suppressed for Ages 0 - 39 11 ( 22.9)
EXPN_GROUP (%) Exclude 11 ( 22.9)
Post-Expansion 12 ( 25.0)
Pre-Expansion 25 ( 52.1)
YEAR_OF_DIAGNOSIS (%) 2010 4 ( 8.3)
2011 3 ( 6.2)
2012 9 ( 18.8)
2013 10 ( 20.8)
2014 12 ( 25.0)
2015 10 ( 20.8)
preExpMedicare  <- nrow(data %>% filter(EXPN_GROUP == "Pre-Expansion" & INSURANCE_F == "Medicare"))
postExpMedicare <- nrow(data %>% filter(EXPN_GROUP == "Post-Expansion" & INSURANCE_F == "Medicare"))
# p = 0.25 when comparing change in proportion of patients with Medicare before and after ACA expansion
prop.test(c(preExpMedicare, postExpMedicare), 
          c(nrow(data %>% filter(EXPN_GROUP == "Pre-Expansion")), nrow(data %>% filter(EXPN_GROUP == "Post-Expansion"))))
Chi-squared approximation may be incorrect

    2-sample test for equality of proportions with continuity correction

data:  c(preExpMedicare, postExpMedicare) out of c(nrow(data %>% filter(EXPN_GROUP == "Pre-Expansion")), nrow(data %>% c(preExpMedicare, postExpMedicare) out of     filter(EXPN_GROUP == "Post-Expansion")))
X-squared = 0.041225, df = 1, p-value = 0.8391
alternative hypothesis: two.sided
95 percent confidence interval:
 -0.4699054  0.2832387
sample estimates:
   prop 1    prop 2 
0.2400000 0.3333333 
preExpNoInsurance <- nrow(data %>% filter(EXPN_GROUP == "Pre-Expansion") %>% 
                            filter(INSURANCE_F == "None"))
postExpNoInsurance <- nrow(data %>% filter(EXPN_GROUP == "Post-Expansion") %>% 
                             filter(INSURANCE_F == "None"))
# Significant decrease in the overall proportion of patients without insurance after ACA expansion 
prop.test(c(preExpNoInsurance, postExpNoInsurance), 
          c(nrow(data %>% filter(EXPN_GROUP == "Pre-Expansion")), nrow(data %>% filter(EXPN_GROUP == "Post-Expansion"))))
Chi-squared approximation may be incorrect

    2-sample test for equality of proportions with continuity correction

data:  c(preExpNoInsurance, postExpNoInsurance) out of c(nrow(data %>% filter(EXPN_GROUP == "Pre-Expansion")), nrow(data %>% c(preExpNoInsurance, postExpNoInsurance) out of     filter(EXPN_GROUP == "Post-Expansion")))
X-squared = 2.5713e-32, df = 1, p-value = 1
alternative hypothesis: two.sided
95 percent confidence interval:
 -0.2608913  0.1742246
sample estimates:
    prop 1     prop 2 
0.04000000 0.08333333 
p_table(no_Excludes, strata = "EXPN_GROUP", vars = "DX_RX_STARTED_DAYS")

level Post-Expansion Pre-Expansion p test
n 248 1137
DX_RX_STARTED_DAYS (mean (sd)) 48.96 (44.78) 48.91 (143.60) 0.996

data <- data %>% mutate(Insured = INSURANCE_F != "Unknown")

Kaplan Meier Analysis

All

uni_var(test_var = "All", data_imp = data)
_________________________________________________
   
## All
_________________________________________________
Call: survfit(formula = Surv(DX_LASTCONTACT_DEATH_MONTHS, PUF_VITAL_STATUS == 
    0) ~ All, data = data)

      n  events  median 0.95LCL 0.95UCL 
  48.00   26.00   18.73    8.08      NA 

Call: survfit(formula = Surv(DX_LASTCONTACT_DEATH_MONTHS, PUF_VITAL_STATUS == 
    0) ~ All, data = data)

 time n.risk n.event survival std.err lower 95% CI upper 95% CI
   12     27      18    0.611  0.0718        0.485        0.769
   24     16       8    0.419  0.0749        0.295        0.595
   36     12       0    0.419  0.0749        0.295        0.595
   48      9       0    0.419  0.0749        0.295        0.595
   60      4       0    0.419  0.0749        0.295        0.595



   
## Univariable Cox Proportional Hazard Model for:  All

[1] "Only one level, no Cox model performed"




   
## Unadjusted Kaplan Meier Overall Survival Curve for:  All

Facility Type

uni_var(test_var = "FACILITY_TYPE_F", data_imp = data)
_________________________________________________
   
## FACILITY_TYPE_F
_________________________________________________
Call: survfit(formula = Surv(DX_LASTCONTACT_DEATH_MONTHS, PUF_VITAL_STATUS == 
    0) ~ FACILITY_TYPE_F, data = data)

   11 observations deleted due to missingness 
                                               n events median 0.95LCL 0.95UCL
FACILITY_TYPE_F=Community Cancer Program       1      0     NA      NA      NA
FACILITY_TYPE_F=Comprehensive Comm Ca Program 13      6   23.9   12.09      NA
FACILITY_TYPE_F=Academic/Research Program     20     13   12.2    4.76      NA
FACILITY_TYPE_F=Integrated Network Ca Program  3      2   14.2    2.20      NA

Call: survfit(formula = Surv(DX_LASTCONTACT_DEATH_MONTHS, PUF_VITAL_STATUS == 
    0) ~ FACILITY_TYPE_F, data = data)

11 observations deleted due to missingness 
                FACILITY_TYPE_F=Community Cancer Program 
 time n.risk n.event survival std.err lower 95% CI upper 95% CI
   12      1       0        1       0            1            1
   24      1       0        1       0            1            1

                FACILITY_TYPE_F=Comprehensive Comm Ca Program 
 time n.risk n.event survival std.err lower 95% CI upper 95% CI
   12      8       3    0.750   0.125        0.541        1.000
   24      4       3    0.438   0.157        0.216        0.884
   36      4       0    0.438   0.157        0.216        0.884
   48      3       0    0.438   0.157        0.216        0.884
   60      1       0    0.438   0.157        0.216        0.884

                FACILITY_TYPE_F=Academic/Research Program 
 time n.risk n.event survival std.err lower 95% CI upper 95% CI
   12     10       9    0.533   0.114        0.351        0.811
   24      4       4    0.305   0.109        0.151        0.614
   36      3       0    0.305   0.109        0.151        0.614
   48      2       0    0.305   0.109        0.151        0.614
   60      2       0    0.305   0.109        0.151        0.614

                FACILITY_TYPE_F=Integrated Network Ca Program 
 time n.risk n.event survival std.err lower 95% CI upper 95% CI
   12      2       1    0.667   0.272       0.2995            1
   24      1       1    0.333   0.272       0.0673            1
   36      1       0    0.333   0.272       0.0673            1
   48      1       0    0.333   0.272       0.0673            1




   
## Univariable Cox Proportional Hazard Model for:  FACILITY_TYPE_F
Loglik converged before variable  1,2,3 ; beta may be infinite. 
Call:
coxph(formula = Surv(DX_LASTCONTACT_DEATH_MONTHS, PUF_VITAL_STATUS == 
    0) ~ FACILITY_TYPE_F, data = data)

  n= 37, number of events= 21 
   (11 observations deleted due to missingness)

                                                  coef exp(coef)  se(coef)     z Pr(>|z|)
FACILITY_TYPE_FComprehensive Comm Ca Program 1.780e+01 5.394e+07 8.479e+03 0.002    0.998
FACILITY_TYPE_FAcademic/Research Program     1.829e+01 8.750e+07 8.479e+03 0.002    0.998
FACILITY_TYPE_FIntegrated Network Ca Program 1.817e+01 7.788e+07 8.479e+03 0.002    0.998

                                             exp(coef) exp(-coef) lower .95 upper .95
FACILITY_TYPE_FComprehensive Comm Ca Program  53936494  1.854e-08         0       Inf
FACILITY_TYPE_FAcademic/Research Program      87500977  1.143e-08         0       Inf
FACILITY_TYPE_FIntegrated Network Ca Program  77881204  1.284e-08         0       Inf

Concordance= 0.586  (se = 0.063 )
Rsquare= 0.078   (max possible= 0.972 )
Likelihood ratio test= 3  on 3 df,   p=0.3923
Wald test            = 0.96  on 3 df,   p=0.8114
Score (logrank) test = 2.04  on 3 df,   p=0.5641
Transformation introduced infinite values in continuous y-axisTransformation introduced infinite values in continuous y-axisTransformation introduced infinite values in continuous y-axisRemoved 1 rows containing missing values (geom_errorbar).Removed 4 rows containing missing values (geom_text).Removed 4 rows containing missing values (geom_text).Removed 4 rows containing missing values (geom_text).Removed 4 rows containing missing values (geom_text).Removed 4 rows containing missing values (geom_text).Removed 1 rows containing missing values (geom_text).



   
## Unadjusted Kaplan Meier Overall Survival Curve for:  FACILITY_TYPE_F

Facility Location

uni_var(test_var = "FACILITY_LOCATION_F", data_imp = data)
_________________________________________________
   
## FACILITY_LOCATION_F
_________________________________________________
Call: survfit(formula = Surv(DX_LASTCONTACT_DEATH_MONTHS, PUF_VITAL_STATUS == 
    0) ~ FACILITY_LOCATION_F, data = data)

   11 observations deleted due to missingness 
                                       n events median 0.95LCL 0.95UCL
FACILITY_LOCATION_F=New England        5      4   8.08    3.15      NA
FACILITY_LOCATION_F=Middle Atlantic    4      3  20.69    7.49      NA
FACILITY_LOCATION_F=South Atlantic     9      4  23.95   12.09      NA
FACILITY_LOCATION_F=East North Central 7      5   4.76    2.20      NA
FACILITY_LOCATION_F=East South Central 1      0     NA      NA      NA
FACILITY_LOCATION_F=West North Central 2      1  16.36   16.36      NA
FACILITY_LOCATION_F=West South Central 1      0     NA      NA      NA
FACILITY_LOCATION_F=Mountain           1      1  14.16      NA      NA
FACILITY_LOCATION_F=Pacific            7      3   6.14    2.04      NA

Call: survfit(formula = Surv(DX_LASTCONTACT_DEATH_MONTHS, PUF_VITAL_STATUS == 
    0) ~ FACILITY_LOCATION_F, data = data)

11 observations deleted due to missingness 
                FACILITY_LOCATION_F=New England 
 time n.risk n.event survival std.err lower 95% CI upper 95% CI
   12      2       3      0.4   0.219       0.1367            1
   24      1       1      0.2   0.179       0.0346            1
   36      1       0      0.2   0.179       0.0346            1
   48      1       0      0.2   0.179       0.0346            1
   60      1       0      0.2   0.179       0.0346            1

                FACILITY_LOCATION_F=Middle Atlantic 
 time n.risk n.event survival std.err lower 95% CI upper 95% CI
   12      3       1     0.75   0.217       0.4259            1
   24      1       2     0.25   0.217       0.0458            1
   36      1       0     0.25   0.217       0.0458            1

                FACILITY_LOCATION_F=South Atlantic 
 time n.risk n.event survival std.err lower 95% CI upper 95% CI
   12      6       2    0.778   0.139        0.549            1
   24      3       2    0.486   0.187        0.228            1
   36      3       0    0.486   0.187        0.228            1
   48      3       0    0.486   0.187        0.228            1

                FACILITY_LOCATION_F=East North Central 
 time n.risk n.event survival std.err lower 95% CI upper 95% CI
   12      3       4    0.429   0.187        0.182            1
   24      1       1    0.214   0.178        0.042            1
   36      1       0    0.214   0.178        0.042            1
   48      1       0    0.214   0.178        0.042            1
   60      1       0    0.214   0.178        0.042            1

                FACILITY_LOCATION_F=East South Central 
 time n.risk n.event survival std.err lower 95% CI upper 95% CI
   12      1       0        1       0            1            1
   24      1       0        1       0            1            1
   36      1       0        1       0            1            1

                FACILITY_LOCATION_F=West North Central 
 time n.risk n.event survival std.err lower 95% CI upper 95% CI
   12      2       0      1.0   0.000        1.000            1
   24      1       1      0.5   0.354        0.125            1

                FACILITY_LOCATION_F=West South Central 
 time n.risk n.event survival std.err lower 95% CI upper 95% CI
   12      1       0        1       0            1            1
   24      1       0        1       0            1            1

                FACILITY_LOCATION_F=Mountain 
        time       n.risk      n.event     survival      std.err lower 95% CI upper 95% CI 
          12            1            0            1            0            1            1 

                FACILITY_LOCATION_F=Pacific 
 time n.risk n.event survival std.err lower 95% CI upper 95% CI
   12      2       3      0.5   0.204        0.225            1
   24      1       0      0.5   0.204        0.225            1
   36      1       0      0.5   0.204        0.225            1
   48      1       0      0.5   0.204        0.225            1
   60      1       0      0.5   0.204        0.225            1




   
## Univariable Cox Proportional Hazard Model for:  FACILITY_LOCATION_F
Loglik converged before variable  4,6 ; beta may be infinite. 
Call:
coxph(formula = Surv(DX_LASTCONTACT_DEATH_MONTHS, PUF_VITAL_STATUS == 
    0) ~ FACILITY_LOCATION_F, data = data)

  n= 37, number of events= 21 
   (11 observations deleted due to missingness)

                                            coef  exp(coef)   se(coef)      z Pr(>|z|)
FACILITY_LOCATION_FMiddle Atlantic    -5.607e-01  5.708e-01  7.685e-01 -0.730    0.466
FACILITY_LOCATION_FSouth Atlantic     -8.513e-01  4.269e-01  7.118e-01 -1.196    0.232
FACILITY_LOCATION_FEast North Central -1.411e-01  8.684e-01  6.743e-01 -0.209    0.834
FACILITY_LOCATION_FEast South Central -1.874e+01  7.301e-09  8.826e+03 -0.002    0.998
FACILITY_LOCATION_FWest North Central -1.065e+00  3.448e-01  1.122e+00 -0.949    0.343
FACILITY_LOCATION_FWest South Central -1.874e+01  7.301e-09  8.826e+03 -0.002    0.998
FACILITY_LOCATION_FMountain           -2.833e-02  9.721e-01  1.126e+00 -0.025    0.980
FACILITY_LOCATION_FPacific            -5.527e-01  5.754e-01  7.657e-01 -0.722    0.470

                                      exp(coef) exp(-coef) lower .95 upper .95
FACILITY_LOCATION_FMiddle Atlantic    5.708e-01  1.752e+00   0.12657     2.574
FACILITY_LOCATION_FSouth Atlantic     4.269e-01  2.343e+00   0.10578     1.722
FACILITY_LOCATION_FEast North Central 8.684e-01  1.151e+00   0.23161     3.256
FACILITY_LOCATION_FEast South Central 7.301e-09  1.370e+08   0.00000       Inf
FACILITY_LOCATION_FWest North Central 3.448e-01  2.900e+00   0.03823     3.111
FACILITY_LOCATION_FWest South Central 7.301e-09  1.370e+08   0.00000       Inf
FACILITY_LOCATION_FMountain           9.721e-01  1.029e+00   0.10701     8.830
FACILITY_LOCATION_FPacific            5.754e-01  1.738e+00   0.12829     2.581

Concordance= 0.641  (se = 0.068 )
Rsquare= 0.163   (max possible= 0.972 )
Likelihood ratio test= 6.59  on 8 df,   p=0.5812
Wald test            = 2.47  on 8 df,   p=0.9633
Score (logrank) test = 4.97  on 8 df,   p=0.7604
Transformation introduced infinite values in continuous y-axisTransformation introduced infinite values in continuous y-axisTransformation introduced infinite values in continuous y-axisRemoved 1 rows containing missing values (geom_errorbar).Removed 9 rows containing missing values (geom_text).Removed 9 rows containing missing values (geom_text).Removed 9 rows containing missing values (geom_text).Removed 9 rows containing missing values (geom_text).Removed 9 rows containing missing values (geom_text).Removed 1 rows containing missing values (geom_text).



   
## Unadjusted Kaplan Meier Overall Survival Curve for:  FACILITY_LOCATION_F

Facility Geography

uni_var(test_var = "FACILITY_GEOGRAPHY", data_imp = data)
_________________________________________________
   
## FACILITY_GEOGRAPHY
_________________________________________________
Call: survfit(formula = Surv(DX_LASTCONTACT_DEATH_MONTHS, PUF_VITAL_STATUS == 
    0) ~ FACILITY_GEOGRAPHY, data = data)

   11 observations deleted due to missingness 
                              n events median 0.95LCL 0.95UCL
FACILITY_GEOGRAPHY=Northeast  9      7   12.2    7.49      NA
FACILITY_GEOGRAPHY=South     10      4     NA   12.09      NA
FACILITY_GEOGRAPHY=Midwest   10      6   18.8    2.20      NA
FACILITY_GEOGRAPHY=West       8      4   14.2    2.04      NA

Call: survfit(formula = Surv(DX_LASTCONTACT_DEATH_MONTHS, PUF_VITAL_STATUS == 
    0) ~ FACILITY_GEOGRAPHY, data = data)

11 observations deleted due to missingness 
                FACILITY_GEOGRAPHY=Northeast 
 time n.risk n.event survival std.err lower 95% CI upper 95% CI
   12      5       4    0.556   0.166       0.3097        0.997
   24      2       3    0.222   0.139       0.0655        0.754
   36      2       0    0.222   0.139       0.0655        0.754
   48      1       0    0.222   0.139       0.0655        0.754
   60      1       0    0.222   0.139       0.0655        0.754

                FACILITY_GEOGRAPHY=South 
 time n.risk n.event survival std.err lower 95% CI upper 95% CI
   12      7       2    0.800   0.126        0.587            1
   24      4       2    0.549   0.172        0.296            1
   36      3       0    0.549   0.172        0.296            1
   48      3       0    0.549   0.172        0.296            1

                FACILITY_GEOGRAPHY=Midwest 
 time n.risk n.event survival std.err lower 95% CI upper 95% CI
   12      6       4    0.600   0.155        0.362        0.995
   24      3       2    0.375   0.161        0.162        0.868
   36      2       0    0.375   0.161        0.162        0.868
   48      1       0    0.375   0.161        0.162        0.868
   60      1       0    0.375   0.161        0.162        0.868

                FACILITY_GEOGRAPHY=West 
 time n.risk n.event survival std.err lower 95% CI upper 95% CI
   12      3       3    0.571   0.187        0.301            1
   24      1       1    0.381   0.199        0.137            1
   36      1       0    0.381   0.199        0.137            1
   48      1       0    0.381   0.199        0.137            1
   60      1       0    0.381   0.199        0.137            1




   
## Univariable Cox Proportional Hazard Model for:  FACILITY_GEOGRAPHY

Call:
coxph(formula = Surv(DX_LASTCONTACT_DEATH_MONTHS, PUF_VITAL_STATUS == 
    0) ~ FACILITY_GEOGRAPHY, data = data)

  n= 37, number of events= 21 
   (11 observations deleted due to missingness)

                             coef exp(coef) se(coef)      z Pr(>|z|)
FACILITY_GEOGRAPHYSouth   -0.7310    0.4814   0.6296 -1.161    0.246
FACILITY_GEOGRAPHYMidwest -0.2676    0.7652   0.5575 -0.480    0.631
FACILITY_GEOGRAPHYWest    -0.1715    0.8424   0.6278 -0.273    0.785

                          exp(coef) exp(-coef) lower .95 upper .95
FACILITY_GEOGRAPHYSouth      0.4814      2.077    0.1402     1.654
FACILITY_GEOGRAPHYMidwest    0.7652      1.307    0.2566     2.282
FACILITY_GEOGRAPHYWest       0.8424      1.187    0.2461     2.883

Concordance= 0.555  (se = 0.067 )
Rsquare= 0.039   (max possible= 0.972 )
Likelihood ratio test= 1.48  on 3 df,   p=0.6869
Wald test            = 1.37  on 3 df,   p=0.7114
Score (logrank) test = 1.42  on 3 df,   p=0.7015
Removed 1 rows containing missing values (geom_errorbar).



   
## Unadjusted Kaplan Meier Overall Survival Curve for:  FACILITY_GEOGRAPHY

Age Group

uni_var(test_var = "AGE_F", data_imp = data)
_________________________________________________
   
## AGE_F
_________________________________________________
Call: survfit(formula = Surv(DX_LASTCONTACT_DEATH_MONTHS, PUF_VITAL_STATUS == 
    0) ~ AGE_F, data = data)

                n events median 0.95LCL 0.95UCL
AGE_F=(0,54]   22     10     NA   12.19      NA
AGE_F=(54,64]  12      5     NA    3.15      NA
AGE_F=(64,74]   5      4   8.08    7.49      NA
AGE_F=(74,100]  9      7   7.14    2.20      NA

Call: survfit(formula = Surv(DX_LASTCONTACT_DEATH_MONTHS, PUF_VITAL_STATUS == 
    0) ~ AGE_F, data = data)

                AGE_F=(0,54] 
 time n.risk n.event survival std.err lower 95% CI upper 95% CI
   12     15       7    0.682  0.0993        0.513        0.907
   24     12       3    0.545  0.1062        0.372        0.799
   36      8       0    0.545  0.1062        0.372        0.799
   48      6       0    0.545  0.1062        0.372        0.799
   60      2       0    0.545  0.1062        0.372        0.799

                AGE_F=(54,64] 
 time n.risk n.event survival std.err lower 95% CI upper 95% CI
   12      6       4    0.648   0.143        0.421        0.998
   24      4       1    0.519   0.163        0.280        0.959
   36      4       0    0.519   0.163        0.280        0.959
   48      3       0    0.519   0.163        0.280        0.959
   60      2       0    0.519   0.163        0.280        0.959

                AGE_F=(64,74] 
        time       n.risk      n.event     survival      std.err lower 95% CI upper 95% CI 
      12.000        2.000        3.000        0.400        0.219        0.137        1.000 

                AGE_F=(74,100] 
        time       n.risk      n.event     survival      std.err lower 95% CI upper 95% CI 
      12.000        4.000        4.000        0.500        0.177        0.250        1.000 




   
## Univariable Cox Proportional Hazard Model for:  AGE_F

Call:
coxph(formula = Surv(DX_LASTCONTACT_DEATH_MONTHS, PUF_VITAL_STATUS == 
    0) ~ AGE_F, data = data)

  n= 48, number of events= 26 

                coef exp(coef) se(coef)     z Pr(>|z|)  
AGE_F(54,64]  0.2168    1.2421   0.5494 0.395    0.693  
AGE_F(64,74]  0.9213    2.5124   0.6018 1.531    0.126  
AGE_F(74,100] 1.1714    3.2266   0.5075 2.308    0.021 *
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

              exp(coef) exp(-coef) lower .95 upper .95
AGE_F(54,64]      1.242     0.8051    0.4231     3.646
AGE_F(64,74]      2.512     0.3980    0.7724     8.172
AGE_F(74,100]     3.227     0.3099    1.1932     8.725

Concordance= 0.611  (se = 0.055 )
Rsquare= 0.116   (max possible= 0.976 )
Likelihood ratio test= 5.91  on 3 df,   p=0.1161
Wald test            = 6.33  on 3 df,   p=0.09657
Score (logrank) test = 6.91  on 3 df,   p=0.0748
Removed 1 rows containing missing values (geom_errorbar).



   
## Unadjusted Kaplan Meier Overall Survival Curve for:  AGE_F

Age Group

uni_var(test_var = "AGE_40", data_imp = data)
_________________________________________________
   
## AGE_40
_________________________________________________
Call: survfit(formula = Surv(DX_LASTCONTACT_DEATH_MONTHS, PUF_VITAL_STATUS == 
    0) ~ AGE_40, data = data)

                 n events median 0.95LCL 0.95UCL
AGE_40=(0,40]   12      6   22.6    4.24      NA
AGE_40=(40,100] 36     20   16.4    8.08      NA

Call: survfit(formula = Surv(DX_LASTCONTACT_DEATH_MONTHS, PUF_VITAL_STATUS == 
    0) ~ AGE_40, data = data)

                AGE_40=(0,40] 
 time n.risk n.event survival std.err lower 95% CI upper 95% CI
   12      7       5    0.583   0.142        0.362        0.941
   24      6       1    0.500   0.144        0.284        0.880
   36      4       0    0.500   0.144        0.284        0.880
   48      3       0    0.500   0.144        0.284        0.880
   60      1       0    0.500   0.144        0.284        0.880

                AGE_40=(40,100] 
 time n.risk n.event survival std.err lower 95% CI upper 95% CI
   12     20      13    0.621  0.0830        0.478        0.807
   24     10       7    0.386  0.0877        0.247        0.602
   36      8       0    0.386  0.0877        0.247        0.602
   48      6       0    0.386  0.0877        0.247        0.602
   60      3       0    0.386  0.0877        0.247        0.602




   
## Univariable Cox Proportional Hazard Model for:  AGE_40

Call:
coxph(formula = Surv(DX_LASTCONTACT_DEATH_MONTHS, PUF_VITAL_STATUS == 
    0) ~ AGE_40, data = data)

  n= 48, number of events= 26 

                coef exp(coef) se(coef)     z Pr(>|z|)
AGE_40(40,100] 0.219     1.245    0.467 0.469    0.639

               exp(coef) exp(-coef) lower .95 upper .95
AGE_40(40,100]     1.245     0.8033    0.4984     3.109

Concordance= 0.511  (se = 0.046 )
Rsquare= 0.005   (max possible= 0.976 )
Likelihood ratio test= 0.23  on 1 df,   p=0.6327
Wald test            = 0.22  on 1 df,   p=0.6391
Score (logrank) test = 0.22  on 1 df,   p=0.6385
Removed 1 rows containing missing values (geom_errorbar).



   
## Unadjusted Kaplan Meier Overall Survival Curve for:  AGE_40

Gender

uni_var(test_var = "SEX_F", data_imp = data)
_________________________________________________
   
## SEX_F
_________________________________________________
Call: survfit(formula = Surv(DX_LASTCONTACT_DEATH_MONTHS, PUF_VITAL_STATUS == 
    0) ~ SEX_F, data = data)

              n events median 0.95LCL 0.95UCL
SEX_F=Male   30     18   14.2    4.76      NA
SEX_F=Female 18      8     NA   12.19      NA

Call: survfit(formula = Surv(DX_LASTCONTACT_DEATH_MONTHS, PUF_VITAL_STATUS == 
    0) ~ SEX_F, data = data)

                SEX_F=Male 
 time n.risk n.event survival std.err lower 95% CI upper 95% CI
   12     15      13    0.556  0.0921        0.401        0.769
   24      7       5    0.343  0.0949        0.199        0.590
   36      5       0    0.343  0.0949        0.199        0.590
   48      2       0    0.343  0.0949        0.199        0.590
   60      2       0    0.343  0.0949        0.199        0.590

                SEX_F=Female 
 time n.risk n.event survival std.err lower 95% CI upper 95% CI
   12     12       5    0.706   0.111        0.519        0.959
   24      9       3    0.529   0.121        0.338        0.829
   36      7       0    0.529   0.121        0.338        0.829
   48      7       0    0.529   0.121        0.338        0.829
   60      2       0    0.529   0.121        0.338        0.829




   
## Univariable Cox Proportional Hazard Model for:  SEX_F

Call:
coxph(formula = Surv(DX_LASTCONTACT_DEATH_MONTHS, PUF_VITAL_STATUS == 
    0) ~ SEX_F, data = data)

  n= 48, number of events= 26 

               coef exp(coef) se(coef)      z Pr(>|z|)
SEX_FFemale -0.4865    0.6148   0.4263 -1.141    0.254

            exp(coef) exp(-coef) lower .95 upper .95
SEX_FFemale    0.6148      1.627    0.2666     1.418

Concordance= 0.557  (se = 0.051 )
Rsquare= 0.028   (max possible= 0.976 )
Likelihood ratio test= 1.37  on 1 df,   p=0.2411
Wald test            = 1.3  on 1 df,   p=0.2538
Score (logrank) test = 1.33  on 1 df,   p=0.2492
Removed 1 rows containing missing values (geom_errorbar).



   
## Unadjusted Kaplan Meier Overall Survival Curve for:  SEX_F

RACE_F

uni_var(test_var = "RACE_F", data_imp = data)
_________________________________________________
   
## RACE_F
_________________________________________________
Call: survfit(formula = Surv(DX_LASTCONTACT_DEATH_MONTHS, PUF_VITAL_STATUS == 
    0) ~ RACE_F, data = data)

                  n events median 0.95LCL 0.95UCL
RACE_F=White     38     21  18.73    8.08      NA
RACE_F=Black      7      4  16.36    2.50      NA
RACE_F=Other/Unk  2      1   4.76    4.76      NA
RACE_F=Asian      1      0     NA      NA      NA

Call: survfit(formula = Surv(DX_LASTCONTACT_DEATH_MONTHS, PUF_VITAL_STATUS == 
    0) ~ RACE_F, data = data)

                RACE_F=White 
 time n.risk n.event survival std.err lower 95% CI upper 95% CI
   12     21      14    0.614  0.0809        0.475        0.795
   24     12       7    0.395  0.0848        0.260        0.602
   36      9       0    0.395  0.0848        0.260        0.602
   48      6       0    0.395  0.0848        0.260        0.602
   60      3       0    0.395  0.0848        0.260        0.602

                RACE_F=Black 
 time n.risk n.event survival std.err lower 95% CI upper 95% CI
   12      4       3    0.571   0.187        0.301            1
   24      3       1    0.429   0.187        0.182            1
   36      2       0    0.429   0.187        0.182            1
   48      2       0    0.429   0.187        0.182            1

                RACE_F=Other/Unk 
 time n.risk n.event survival std.err lower 95% CI upper 95% CI
   12      1       1      0.5   0.354        0.125            1
   24      1       0      0.5   0.354        0.125            1
   36      1       0      0.5   0.354        0.125            1
   48      1       0      0.5   0.354        0.125            1
   60      1       0      0.5   0.354        0.125            1

                RACE_F=Asian 
        time       n.risk      n.event     survival      std.err lower 95% CI upper 95% CI 
          12            1            0            1            0            1            1 




   
## Univariable Cox Proportional Hazard Model for:  RACE_F
Loglik converged before variable  3 ; beta may be infinite. 
Call:
coxph(formula = Surv(DX_LASTCONTACT_DEATH_MONTHS, PUF_VITAL_STATUS == 
    0) ~ RACE_F, data = data)

  n= 48, number of events= 26 

                      coef  exp(coef)   se(coef)      z Pr(>|z|)
RACE_FBlack     -3.730e-02  9.634e-01  5.458e-01 -0.068    0.946
RACE_FOther/Unk -2.627e-01  7.690e-01  1.024e+00 -0.256    0.798
RACE_FAsian     -1.707e+01  3.845e-08  5.574e+03 -0.003    0.998

                exp(coef) exp(-coef) lower .95 upper .95
RACE_FBlack     9.634e-01  1.038e+00    0.3305     2.808
RACE_FOther/Unk 7.690e-01  1.300e+00    0.1033     5.724
RACE_FAsian     3.845e-08  2.600e+07    0.0000       Inf

Concordance= 0.521  (se = 0.044 )
Rsquare= 0.035   (max possible= 0.976 )
Likelihood ratio test= 1.69  on 3 df,   p=0.6391
Wald test            = 0.07  on 3 df,   p=0.9954
Score (logrank) test = 0.89  on 3 df,   p=0.8271
Transformation introduced infinite values in continuous y-axisTransformation introduced infinite values in continuous y-axisTransformation introduced infinite values in continuous y-axisRemoved 1 rows containing missing values (geom_errorbar).Removed 4 rows containing missing values (geom_text).Removed 4 rows containing missing values (geom_text).Removed 4 rows containing missing values (geom_text).Removed 4 rows containing missing values (geom_text).Removed 4 rows containing missing values (geom_text).Removed 1 rows containing missing values (geom_text).



   
## Unadjusted Kaplan Meier Overall Survival Curve for:  RACE_F

Hispanic

uni_var(test_var = "HISPANIC", data_imp = data)
_________________________________________________
   
## HISPANIC
_________________________________________________
Call: survfit(formula = Surv(DX_LASTCONTACT_DEATH_MONTHS, PUF_VITAL_STATUS == 
    0) ~ HISPANIC, data = data)

                  n events median 0.95LCL 0.95UCL
HISPANIC=No      43     25  16.36    7.49      NA
HISPANIC=Yes      3      0     NA      NA      NA
HISPANIC=Unknown  2      1   4.76    4.76      NA

Call: survfit(formula = Surv(DX_LASTCONTACT_DEATH_MONTHS, PUF_VITAL_STATUS == 
    0) ~ HISPANIC, data = data)

                HISPANIC=No 
 time n.risk n.event survival std.err lower 95% CI upper 95% CI
   12     23      17    0.588  0.0767        0.456         0.76
   24     12       8    0.369  0.0785        0.243         0.56
   36     10       0    0.369  0.0785        0.243         0.56
   48      7       0    0.369  0.0785        0.243         0.56
   60      3       0    0.369  0.0785        0.243         0.56

                HISPANIC=Yes 
 time n.risk n.event survival std.err lower 95% CI upper 95% CI
   12      3       0        1       0            1            1
   24      3       0        1       0            1            1
   36      2       0        1       0            1            1
   48      2       0        1       0            1            1
   60      1       0        1       0            1            1

                HISPANIC=Unknown 
 time n.risk n.event survival std.err lower 95% CI upper 95% CI
   12      1       1      0.5   0.354        0.125            1
   24      1       0      0.5   0.354        0.125            1




   
## Univariable Cox Proportional Hazard Model for:  HISPANIC
Loglik converged before variable  1 ; beta may be infinite. 
Call:
coxph(formula = Surv(DX_LASTCONTACT_DEATH_MONTHS, PUF_VITAL_STATUS == 
    0) ~ HISPANIC, data = data)

  n= 48, number of events= 26 

                      coef  exp(coef)   se(coef)      z Pr(>|z|)
HISPANICYes     -1.820e+01  1.246e-08  5.245e+03 -0.003    0.997
HISPANICUnknown -3.352e-01  7.152e-01  1.021e+00 -0.328    0.743

                exp(coef) exp(-coef) lower .95 upper .95
HISPANICYes     1.246e-08  8.028e+07   0.00000       Inf
HISPANICUnknown 7.152e-01  1.398e+00   0.09678     5.285

Concordance= 0.554  (se = 0.036 )
Rsquare= 0.109   (max possible= 0.976 )
Likelihood ratio test= 5.54  on 2 df,   p=0.06266
Wald test            = 0.11  on 2 df,   p=0.9475
Score (logrank) test = 2.99  on 2 df,   p=0.2242
Transformation introduced infinite values in continuous y-axisTransformation introduced infinite values in continuous y-axisTransformation introduced infinite values in continuous y-axisRemoved 1 rows containing missing values (geom_errorbar).Removed 3 rows containing missing values (geom_text).Removed 3 rows containing missing values (geom_text).Removed 3 rows containing missing values (geom_text).Removed 3 rows containing missing values (geom_text).Removed 3 rows containing missing values (geom_text).Removed 1 rows containing missing values (geom_text).



   
## Unadjusted Kaplan Meier Overall Survival Curve for:  HISPANIC

Insurance Status

uni_var(test_var = "INSURANCE_F", data_imp = data)
_________________________________________________
   
## INSURANCE_F
_________________________________________________
Call: survfit(formula = Surv(DX_LASTCONTACT_DEATH_MONTHS, PUF_VITAL_STATUS == 
    0) ~ INSURANCE_F, data = data)

                              n events median 0.95LCL 0.95UCL
INSURANCE_F=Private          29     12     NA   16.36      NA
INSURANCE_F=None              2      2   3.19    0.23      NA
INSURANCE_F=Medicaid          3      2   4.76    0.66      NA
INSURANCE_F=Medicare         12      8  12.09    2.50      NA
INSURANCE_F=Other Government  1      1  14.16      NA      NA
INSURANCE_F=Unknown           1      1   4.30      NA      NA

Call: survfit(formula = Surv(DX_LASTCONTACT_DEATH_MONTHS, PUF_VITAL_STATUS == 
    0) ~ INSURANCE_F, data = data)

                INSURANCE_F=Private 
 time n.risk n.event survival std.err lower 95% CI upper 95% CI
   12     20       8    0.718  0.0845        0.570        0.905
   24     14       4    0.564  0.0955        0.405        0.786
   36     11       0    0.564  0.0955        0.405        0.786
   48      8       0    0.564  0.0955        0.405        0.786
   60      4       0    0.564  0.0955        0.405        0.786

                INSURANCE_F=None 
     time n.risk n.event survival std.err lower 95% CI upper 95% CI

                INSURANCE_F=Medicaid 
 time n.risk n.event survival std.err lower 95% CI upper 95% CI
   12      1       2    0.333   0.272       0.0673            1
   24      1       0    0.333   0.272       0.0673            1

                INSURANCE_F=Medicare 
 time n.risk n.event survival std.err lower 95% CI upper 95% CI
   12      5       5    0.545   0.150       0.3180        0.936
   24      1       3    0.218   0.134       0.0656        0.725
   36      1       0    0.218   0.134       0.0656        0.725
   48      1       0    0.218   0.134       0.0656        0.725

                INSURANCE_F=Other Government 
        time       n.risk      n.event     survival      std.err lower 95% CI upper 95% CI 
          12            1            0            1            0            1            1 

                INSURANCE_F=Unknown 
     time n.risk n.event survival std.err lower 95% CI upper 95% CI




   
## Univariable Cox Proportional Hazard Model for:  INSURANCE_F

Call:
coxph(formula = Surv(DX_LASTCONTACT_DEATH_MONTHS, PUF_VITAL_STATUS == 
    0) ~ INSURANCE_F, data = data)

  n= 48, number of events= 26 

                              coef exp(coef) se(coef)     z Pr(>|z|)  
INSURANCE_FNone             2.0407    7.6958   0.7942 2.569   0.0102 *
INSURANCE_FMedicaid         0.8280    2.2888   0.7657 1.081   0.2795  
INSURANCE_FMedicare         0.8366    2.3086   0.4635 1.805   0.0710 .
INSURANCE_FOther Government 0.9571    2.6042   1.0511 0.911   0.3625  
INSURANCE_FUnknown          1.5670    4.7924   1.0678 1.468   0.1422  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

                            exp(coef) exp(-coef) lower .95 upper .95
INSURANCE_FNone                 7.696     0.1299    1.6226    36.502
INSURANCE_FMedicaid             2.289     0.4369    0.5103    10.266
INSURANCE_FMedicare             2.309     0.4332    0.9308     5.726
INSURANCE_FOther Government     2.604     0.3840    0.3319    20.434
INSURANCE_FUnknown              4.792     0.2087    0.5911    38.855

Concordance= 0.616  (se = 0.051 )
Rsquare= 0.152   (max possible= 0.976 )
Likelihood ratio test= 7.92  on 5 df,   p=0.1608
Wald test            = 9.1  on 5 df,   p=0.1052
Score (logrank) test = 10.87  on 5 df,   p=0.05407
Removed 1 rows containing missing values (geom_errorbar).



   
## Unadjusted Kaplan Meier Overall Survival Curve for:  INSURANCE_F

Overall Survival pre/post-ACA expansion

uni_var(test_var = "EXPN_GROUP", data_imp = no_Excludes)
_________________________________________________
   
## EXPN_GROUP
_________________________________________________
Call: survfit(formula = Surv(DX_LASTCONTACT_DEATH_MONTHS, PUF_VITAL_STATUS == 
    0) ~ EXPN_GROUP, data = no_Excludes)

                             n events median 0.95LCL 0.95UCL
EXPN_GROUP=Post-Expansion  248     36     NA    82.8      NA
EXPN_GROUP=Pre-Expansion  1137    303    142   128.2      NA

Call: survfit(formula = Surv(DX_LASTCONTACT_DEATH_MONTHS, PUF_VITAL_STATUS == 
    0) ~ EXPN_GROUP, data = no_Excludes)

                EXPN_GROUP=Post-Expansion 
 time n.risk n.event survival std.err lower 95% CI upper 95% CI
   12    206       8    0.965  0.0121        0.942        0.989
   24    144      16    0.882  0.0229        0.838        0.928
   36     79       6    0.838  0.0280        0.785        0.894
   48     52       3    0.797  0.0351        0.731        0.869
   60     33       1    0.780  0.0384        0.708        0.859

                EXPN_GROUP=Pre-Expansion 
 time n.risk n.event survival std.err lower 95% CI upper 95% CI
   12   1000      41    0.962 0.00580        0.951        0.974
   24    900      41    0.921 0.00835        0.905        0.938
   36    799      34    0.885 0.01009        0.865        0.905
   48    683      33    0.846 0.01167        0.824        0.870
   60    568      44    0.789 0.01376        0.762        0.816
  120    125      94    0.586 0.02213        0.545        0.631




   
## Univariable Cox Proportional Hazard Model for:  EXPN_GROUP

Call:
coxph(formula = Surv(DX_LASTCONTACT_DEATH_MONTHS, PUF_VITAL_STATUS == 
    0) ~ EXPN_GROUP, data = no_Excludes)

  n= 1385, number of events= 339 

                           coef exp(coef) se(coef)      z Pr(>|z|)
EXPN_GROUPPre-Expansion -0.2137    0.8076   0.1815 -1.178    0.239

                        exp(coef) exp(-coef) lower .95 upper .95
EXPN_GROUPPre-Expansion    0.8076      1.238    0.5659     1.153

Concordance= 0.514  (se = 0.01 )
Rsquare= 0.001   (max possible= 0.958 )
Likelihood ratio test= 1.32  on 1 df,   p=0.2507
Wald test            = 1.39  on 1 df,   p=0.239
Score (logrank) test = 1.39  on 1 df,   p=0.2381





   
## Unadjusted Kaplan Meier Overall Survival Curve for:  EXPN_GROUP

Education

uni_var(test_var = "EDUCATION_F", data_imp = data)
_________________________________________________
   
## EDUCATION_F
_________________________________________________
Call: survfit(formula = Surv(DX_LASTCONTACT_DEATH_MONTHS, PUF_VITAL_STATUS == 
    0) ~ EDUCATION_F, data = data)

                          n events median 0.95LCL 0.95UCL
EDUCATION_F=21% or more   6      3   12.2    1.58      NA
EDUCATION_F=13 - 20.9%   14     10   12.1    4.76      NA
EDUCATION_F=7 - 12.9%    15      6     NA    7.49      NA
EDUCATION_F=Less than 7% 13      7   21.3    2.50      NA

Call: survfit(formula = Surv(DX_LASTCONTACT_DEATH_MONTHS, PUF_VITAL_STATUS == 
    0) ~ EDUCATION_F, data = data)

                EDUCATION_F=21% or more 
 time n.risk n.event survival std.err lower 95% CI upper 95% CI
   12      3       2    0.667   0.192        0.379            1
   24      2       1    0.444   0.222        0.167            1
   36      2       0    0.444   0.222        0.167            1
   48      2       0    0.444   0.222        0.167            1

                EDUCATION_F=13 - 20.9% 
 time n.risk n.event survival std.err lower 95% CI upper 95% CI
   12      7       6    0.538   0.138       0.3255        0.891
   24      3       4    0.231   0.117       0.0855        0.623
   36      2       0    0.231   0.117       0.0855        0.623
   48      2       0    0.231   0.117       0.0855        0.623
   60      1       0    0.231   0.117       0.0855        0.623

                EDUCATION_F=7 - 12.9% 
 time n.risk n.event survival std.err lower 95% CI upper 95% CI
   12     10       5    0.667   0.122        0.466        0.953
   24      7       1    0.593   0.129        0.387        0.907
   36      5       0    0.593   0.129        0.387        0.907
   48      4       0    0.593   0.129        0.387        0.907
   60      2       0    0.593   0.129        0.387        0.907

                EDUCATION_F=Less than 7% 
 time n.risk n.event survival std.err lower 95% CI upper 95% CI
   12      7       5    0.598   0.140        0.378        0.947
   24      4       2    0.399   0.148        0.193        0.826
   36      3       0    0.399   0.148        0.193        0.826
   48      1       0    0.399   0.148        0.193        0.826
   60      1       0    0.399   0.148        0.193        0.826




   
## Univariable Cox Proportional Hazard Model for:  EDUCATION_F

Call:
coxph(formula = Surv(DX_LASTCONTACT_DEATH_MONTHS, PUF_VITAL_STATUS == 
    0) ~ EDUCATION_F, data = data)

  n= 48, number of events= 26 

                            coef exp(coef) se(coef)      z Pr(>|z|)
EDUCATION_F13 - 20.9%    0.41117   1.50858  0.65908  0.624    0.533
EDUCATION_F7 - 12.9%    -0.50351   0.60441  0.70840 -0.711    0.477
EDUCATION_FLess than 7%  0.04348   1.04444  0.69088  0.063    0.950

                        exp(coef) exp(-coef) lower .95 upper .95
EDUCATION_F13 - 20.9%      1.5086     0.6629    0.4145     5.490
EDUCATION_F7 - 12.9%       0.6044     1.6545    0.1508     2.423
EDUCATION_FLess than 7%    1.0444     0.9575    0.2697     4.045

Concordance= 0.591  (se = 0.058 )
Rsquare= 0.066   (max possible= 0.976 )
Likelihood ratio test= 3.27  on 3 df,   p=0.3519
Wald test            = 3.12  on 3 df,   p=0.3741
Score (logrank) test = 3.27  on 3 df,   p=0.3517
Removed 1 rows containing missing values (geom_errorbar).



   
## Unadjusted Kaplan Meier Overall Survival Curve for:  EDUCATION_F

Urban/Rural

uni_var(test_var = "U_R_F", data_imp = data)
_________________________________________________
   
## U_R_F
_________________________________________________
Call: survfit(formula = Surv(DX_LASTCONTACT_DEATH_MONTHS, PUF_VITAL_STATUS == 
    0) ~ U_R_F, data = data)

             n events median 0.95LCL 0.95UCL
U_R_F=Metro 39     22  18.73    7.49      NA
U_R_F=Urban  8      3     NA    8.08      NA
U_R_F=Rural  1      1   3.15      NA      NA

Call: survfit(formula = Surv(DX_LASTCONTACT_DEATH_MONTHS, PUF_VITAL_STATUS == 
    0) ~ U_R_F, data = data)

                U_R_F=Metro 
 time n.risk n.event survival std.err lower 95% CI upper 95% CI
   12     23      14    0.625  0.0793        0.488        0.802
   24     12       8    0.392  0.0826        0.259        0.592
   36     10       0    0.392  0.0826        0.259        0.592
   48      7       0    0.392  0.0826        0.259        0.592
   60      4       0    0.392  0.0826        0.259        0.592

                U_R_F=Urban 
 time n.risk n.event survival std.err lower 95% CI upper 95% CI
   12      4       3    0.625   0.171        0.365            1
   24      4       0    0.625   0.171        0.365            1
   36      2       0    0.625   0.171        0.365            1
   48      2       0    0.625   0.171        0.365            1

                U_R_F=Rural 
     time n.risk n.event survival std.err lower 95% CI upper 95% CI




   
## Univariable Cox Proportional Hazard Model for:  U_R_F

Call:
coxph(formula = Surv(DX_LASTCONTACT_DEATH_MONTHS, PUF_VITAL_STATUS == 
    0) ~ U_R_F, data = data)

  n= 48, number of events= 26 

              coef exp(coef) se(coef)      z Pr(>|z|)
U_R_FUrban -0.5878    0.5556   0.6162 -0.954    0.340
U_R_FRural  1.1896    3.2859   1.0477  1.135    0.256

           exp(coef) exp(-coef) lower .95 upper .95
U_R_FUrban    0.5556     1.8000    0.1661     1.859
U_R_FRural    3.2859     0.3043    0.4215    25.614

Concordance= 0.552  (se = 0.043 )
Rsquare= 0.043   (max possible= 0.976 )
Likelihood ratio test= 2.13  on 2 df,   p=0.3448
Wald test            = 2.37  on 2 df,   p=0.3057
Score (logrank) test = 2.64  on 2 df,   p=0.2671
Removed 1 rows containing missing values (geom_errorbar).



   
## Unadjusted Kaplan Meier Overall Survival Curve for:  U_R_F

Class (treatment at performing facility)

uni_var(test_var = "CLASS_OF_CASE_F", data_imp = data)
_________________________________________________
   
## CLASS_OF_CASE_F
_________________________________________________
Call: survfit(formula = Surv(DX_LASTCONTACT_DEATH_MONTHS, PUF_VITAL_STATUS == 
    0) ~ CLASS_OF_CASE_F, data = data)

                                n events median 0.95LCL 0.95UCL
CLASS_OF_CASE_F=Other_Facility  3      2   12.3    0.66      NA
CLASS_OF_CASE_F=All_Part_Prim  45     24   18.7    8.08      NA

Call: survfit(formula = Surv(DX_LASTCONTACT_DEATH_MONTHS, PUF_VITAL_STATUS == 
    0) ~ CLASS_OF_CASE_F, data = data)

                CLASS_OF_CASE_F=Other_Facility 
        time       n.risk      n.event     survival      std.err lower 95% CI upper 95% CI 
      12.000        1.000        1.000        0.500        0.354        0.125        1.000 

                CLASS_OF_CASE_F=All_Part_Prim 
 time n.risk n.event survival std.err lower 95% CI upper 95% CI
   12     26      17    0.616  0.0732        0.488        0.777
   24     16       7    0.442  0.0767        0.315        0.621
   36     12       0    0.442  0.0767        0.315        0.621
   48      9       0    0.442  0.0767        0.315        0.621
   60      4       0    0.442  0.0767        0.315        0.621




   
## Univariable Cox Proportional Hazard Model for:  CLASS_OF_CASE_F

Call:
coxph(formula = Surv(DX_LASTCONTACT_DEATH_MONTHS, PUF_VITAL_STATUS == 
    0) ~ CLASS_OF_CASE_F, data = data)

  n= 48, number of events= 26 

                                coef exp(coef) se(coef)      z Pr(>|z|)
CLASS_OF_CASE_FAll_Part_Prim -0.7868    0.4553   0.7378 -1.066    0.286

                             exp(coef) exp(-coef) lower .95 upper .95
CLASS_OF_CASE_FAll_Part_Prim    0.4553      2.196    0.1072     1.933

Concordance= 0.518  (se = 0.019 )
Rsquare= 0.019   (max possible= 0.976 )
Likelihood ratio test= 0.92  on 1 df,   p=0.3378
Wald test            = 1.14  on 1 df,   p=0.2862
Score (logrank) test = 1.2  on 1 df,   p=0.2739
Removed 1 rows containing missing values (geom_errorbar).



   
## Unadjusted Kaplan Meier Overall Survival Curve for:  CLASS_OF_CASE_F

Year

uni_var(test_var = "YEAR_OF_DIAGNOSIS", data_imp = data)
_________________________________________________
   
## YEAR_OF_DIAGNOSIS
_________________________________________________
Call: survfit(formula = Surv(DX_LASTCONTACT_DEATH_MONTHS, PUF_VITAL_STATUS == 
    0) ~ YEAR_OF_DIAGNOSIS, data = data)

                        n events median 0.95LCL 0.95UCL
YEAR_OF_DIAGNOSIS=2010  4      1     NA    2.04      NA
YEAR_OF_DIAGNOSIS=2011  3      1     NA   14.16      NA
YEAR_OF_DIAGNOSIS=2012  9      7  12.09    4.24      NA
YEAR_OF_DIAGNOSIS=2013 10      4     NA    7.49      NA
YEAR_OF_DIAGNOSIS=2014 12      7   6.14    3.15      NA
YEAR_OF_DIAGNOSIS=2015 10      6  12.19    2.50      NA

Call: survfit(formula = Surv(DX_LASTCONTACT_DEATH_MONTHS, PUF_VITAL_STATUS == 
    0) ~ YEAR_OF_DIAGNOSIS, data = data)

                YEAR_OF_DIAGNOSIS=2010 
 time n.risk n.event survival std.err lower 95% CI upper 95% CI
   12      3       1     0.75   0.217        0.426            1
   24      3       0     0.75   0.217        0.426            1
   36      3       0     0.75   0.217        0.426            1
   48      3       0     0.75   0.217        0.426            1
   60      3       0     0.75   0.217        0.426            1

                YEAR_OF_DIAGNOSIS=2011 
 time n.risk n.event survival std.err lower 95% CI upper 95% CI
   12      3       0    1.000   0.000          1.0            1
   24      2       1    0.667   0.272          0.3            1
   36      2       0    0.667   0.272          0.3            1
   48      1       0    0.667   0.272          0.3            1

                YEAR_OF_DIAGNOSIS=2012 
 time n.risk n.event survival std.err lower 95% CI upper 95% CI
   12      5       4    0.556   0.166       0.3097        0.997
   24      2       3    0.222   0.139       0.0655        0.754
   36      2       0    0.222   0.139       0.0655        0.754
   48      2       0    0.222   0.139       0.0655        0.754
   60      1       0    0.222   0.139       0.0655        0.754

                YEAR_OF_DIAGNOSIS=2013 
 time n.risk n.event survival std.err lower 95% CI upper 95% CI
   12      7       3    0.700   0.145        0.467            1
   24      5       1    0.583   0.161        0.340            1
   36      5       0    0.583   0.161        0.340            1
   48      3       0    0.583   0.161        0.340            1

                YEAR_OF_DIAGNOSIS=2014 
 time n.risk n.event survival std.err lower 95% CI upper 95% CI
   12      4       6    0.416   0.156        0.199        0.868
   24      3       1    0.312   0.148        0.123        0.789

                YEAR_OF_DIAGNOSIS=2015 
 time n.risk n.event survival std.err lower 95% CI upper 95% CI
   12      5       4     0.60   0.155       0.3617        0.995
   24      1       2     0.24   0.188       0.0515        1.000




   
## Univariable Cox Proportional Hazard Model for:  YEAR_OF_DIAGNOSIS

Call:
coxph(formula = Surv(DX_LASTCONTACT_DEATH_MONTHS, PUF_VITAL_STATUS == 
    0) ~ YEAR_OF_DIAGNOSIS, data = data)

  n= 48, number of events= 26 

                        coef exp(coef) se(coef)     z Pr(>|z|)
YEAR_OF_DIAGNOSIS2011 0.1752    1.1914   1.4147 0.124    0.901
YEAR_OF_DIAGNOSIS2012 1.4528    4.2751   1.0712 1.356    0.175
YEAR_OF_DIAGNOSIS2013 0.5911    1.8060   1.1185 0.528    0.597
YEAR_OF_DIAGNOSIS2014 1.4031    4.0680   1.0716 1.309    0.190
YEAR_OF_DIAGNOSIS2015 1.1273    3.0872   1.0832 1.041    0.298

                      exp(coef) exp(-coef) lower .95 upper .95
YEAR_OF_DIAGNOSIS2011     1.191     0.8393   0.07445     19.07
YEAR_OF_DIAGNOSIS2012     4.275     0.2339   0.52379     34.89
YEAR_OF_DIAGNOSIS2013     1.806     0.5537   0.20166     16.17
YEAR_OF_DIAGNOSIS2014     4.068     0.2458   0.49800     33.23
YEAR_OF_DIAGNOSIS2015     3.087     0.3239   0.36947     25.80

Concordance= 0.617  (se = 0.06 )
Rsquare= 0.106   (max possible= 0.976 )
Likelihood ratio test= 5.35  on 5 df,   p=0.3743
Wald test            = 4.55  on 5 df,   p=0.4735
Score (logrank) test = 4.99  on 5 df,   p=0.4169
Removed 1 rows containing missing values (geom_errorbar).



   
## Unadjusted Kaplan Meier Overall Survival Curve for:  YEAR_OF_DIAGNOSIS

Primary Site

uni_var(test_var = "SITE_TEXT", data_imp = data)
_________________________________________________
   
## SITE_TEXT
_________________________________________________
Call: survfit(formula = Surv(DX_LASTCONTACT_DEATH_MONTHS, PUF_VITAL_STATUS == 
    0) ~ SITE_TEXT, data = data)

                                                           n events median 0.95LCL 0.95UCL
SITE_TEXT=C44.3 Skin of ear and unspecified parts of face  2      0     NA      NA      NA
SITE_TEXT=C44.5 Skin of trunk                              4      1     NA    2.04      NA
SITE_TEXT=C44.6 Skin of upper limb and shoulder            2      1   6.14    6.14      NA
SITE_TEXT=C44.7 Skin of lower limb and hip                11      7  18.73    7.49      NA
SITE_TEXT=C44.8 Overlapping lesion of skin                 3      1     NA   14.16      NA
SITE_TEXT=C44.9 Skin, NOS                                 26     16  10.13    2.50      NA

Call: survfit(formula = Surv(DX_LASTCONTACT_DEATH_MONTHS, PUF_VITAL_STATUS == 
    0) ~ SITE_TEXT, data = data)

                SITE_TEXT=C44.3 Skin of ear and unspecified parts of face 
 time n.risk n.event survival std.err lower 95% CI upper 95% CI
   12      2       0        1       0            1            1
   24      1       0        1       0            1            1

                SITE_TEXT=C44.5 Skin of trunk 
 time n.risk n.event survival std.err lower 95% CI upper 95% CI
   12      1       1    0.667   0.272          0.3            1
   24      1       0    0.667   0.272          0.3            1
   36      1       0    0.667   0.272          0.3            1
   48      1       0    0.667   0.272          0.3            1
   60      1       0    0.667   0.272          0.3            1

                SITE_TEXT=C44.6 Skin of upper limb and shoulder 
 time n.risk n.event survival std.err lower 95% CI upper 95% CI
   12      1       1      0.5   0.354        0.125            1
   24      1       0      0.5   0.354        0.125            1

                SITE_TEXT=C44.7 Skin of lower limb and hip 
 time n.risk n.event survival std.err lower 95% CI upper 95% CI
   12      7       3     0.70   0.145       0.4665        1.000
   24      2       4     0.24   0.145       0.0732        0.786
   36      2       0     0.24   0.145       0.0732        0.786
   48      1       0     0.24   0.145       0.0732        0.786

                SITE_TEXT=C44.8 Overlapping lesion of skin 
 time n.risk n.event survival std.err lower 95% CI upper 95% CI
   12      3       0    1.000   0.000          1.0            1
   24      2       1    0.667   0.272          0.3            1
   36      2       0    0.667   0.272          0.3            1
   48      2       0    0.667   0.272          0.3            1

                SITE_TEXT=C44.9 Skin, NOS 
 time n.risk n.event survival std.err lower 95% CI upper 95% CI
   12     13      13    0.500  0.0981        0.340        0.734
   24      9       3    0.381  0.0960        0.232        0.624
   36      7       0    0.381  0.0960        0.232        0.624
   48      5       0    0.381  0.0960        0.232        0.624
   60      3       0    0.381  0.0960        0.232        0.624




   
## Univariable Cox Proportional Hazard Model for:  SITE_TEXT
Loglik converged before variable  1,2,3,4,5 ; beta may be infinite. 
Call:
coxph(formula = Surv(DX_LASTCONTACT_DEATH_MONTHS, PUF_VITAL_STATUS == 
    0) ~ SITE_TEXT, data = data)

  n= 48, number of events= 26 

                                                    coef exp(coef)  se(coef)     z Pr(>|z|)
SITE_TEXTC44.5 Skin of trunk                   1.756e+01 4.241e+07 6.549e+03 0.003    0.998
SITE_TEXTC44.6 Skin of upper limb and shoulder 1.784e+01 5.593e+07 6.549e+03 0.003    0.998
SITE_TEXTC44.7 Skin of lower limb and hip      1.824e+01 8.369e+07 6.549e+03 0.003    0.998
SITE_TEXTC44.8 Overlapping lesion of skin      1.724e+01 3.067e+07 6.549e+03 0.003    0.998
SITE_TEXTC44.9 Skin, NOS                       1.828e+01 8.666e+07 6.549e+03 0.003    0.998

                                               exp(coef) exp(-coef) lower .95 upper .95
SITE_TEXTC44.5 Skin of trunk                    42408559  2.358e-08         0       Inf
SITE_TEXTC44.6 Skin of upper limb and shoulder  55932132  1.788e-08         0       Inf
SITE_TEXTC44.7 Skin of lower limb and hip       83685141  1.195e-08         0       Inf
SITE_TEXTC44.8 Overlapping lesion of skin       30672307  3.260e-08         0       Inf
SITE_TEXTC44.9 Skin, NOS                        86656240  1.154e-08         0       Inf

Concordance= 0.606  (se = 0.056 )
Rsquare= 0.106   (max possible= 0.976 )
Likelihood ratio test= 5.4  on 5 df,   p=0.3689
Wald test            = 1.56  on 5 df,   p=0.906
Score (logrank) test = 3.55  on 5 df,   p=0.6159
Transformation introduced infinite values in continuous y-axisTransformation introduced infinite values in continuous y-axisTransformation introduced infinite values in continuous y-axisRemoved 1 rows containing missing values (geom_errorbar).Removed 6 rows containing missing values (geom_text).Removed 6 rows containing missing values (geom_text).Removed 6 rows containing missing values (geom_text).Removed 6 rows containing missing values (geom_text).Removed 6 rows containing missing values (geom_text).Removed 1 rows containing missing values (geom_text).



   
## Unadjusted Kaplan Meier Overall Survival Curve for:  SITE_TEXT

Histology

#uni_var(test_var = "HISTOLOGY_F_LIM", data_imp = data)

Grade

#uni_var(test_var = "GRADE_F", data_imp = data)

Clinical T Stage

uni_var(test_var = "TNM_CLIN_T", data_imp = data)
_________________________________________________
   
## TNM_CLIN_T
_________________________________________________
Call: survfit(formula = Surv(DX_LASTCONTACT_DEATH_MONTHS, PUF_VITAL_STATUS == 
    0) ~ TNM_CLIN_T, data = data)

   4 observations deleted due to missingness 
      n  events  median 0.95LCL 0.95UCL 
  44.00   26.00   16.36    7.49      NA 

Call: survfit(formula = Surv(DX_LASTCONTACT_DEATH_MONTHS, PUF_VITAL_STATUS == 
    0) ~ TNM_CLIN_T, data = data)

4 observations deleted due to missingness 
 time n.risk n.event survival std.err lower 95% CI upper 95% CI
   12     25      18    0.584  0.0751        0.454        0.751
   24     15       8    0.387  0.0757        0.263        0.567
   36     12       0    0.387  0.0757        0.263        0.567
   48      9       0    0.387  0.0757        0.263        0.567
   60      4       0    0.387  0.0757        0.263        0.567



   
## Univariable Cox Proportional Hazard Model for:  TNM_CLIN_T

[1] "Only one level, no Cox model performed"




   
## Unadjusted Kaplan Meier Overall Survival Curve for:  TNM_CLIN_T

Clinical N Stage

uni_var(test_var = "TNM_CLIN_N", data_imp = data)
_________________________________________________
   
## TNM_CLIN_N
_________________________________________________
Call: survfit(formula = Surv(DX_LASTCONTACT_DEATH_MONTHS, PUF_VITAL_STATUS == 
    0) ~ TNM_CLIN_N, data = data)

   4 observations deleted due to missingness 
      n  events  median 0.95LCL 0.95UCL 
  44.00   26.00   16.36    7.49      NA 

Call: survfit(formula = Surv(DX_LASTCONTACT_DEATH_MONTHS, PUF_VITAL_STATUS == 
    0) ~ TNM_CLIN_N, data = data)

4 observations deleted due to missingness 
 time n.risk n.event survival std.err lower 95% CI upper 95% CI
   12     25      18    0.584  0.0751        0.454        0.751
   24     15       8    0.387  0.0757        0.263        0.567
   36     12       0    0.387  0.0757        0.263        0.567
   48      9       0    0.387  0.0757        0.263        0.567
   60      4       0    0.387  0.0757        0.263        0.567



   
## Univariable Cox Proportional Hazard Model for:  TNM_CLIN_N

[1] "Only one level, no Cox model performed"




   
## Unadjusted Kaplan Meier Overall Survival Curve for:  TNM_CLIN_N

Clinical Stage Group

uni_var(test_var = "TNM_CLIN_STAGE_GROUP", data_imp = data)
_________________________________________________
   
## TNM_CLIN_STAGE_GROUP
_________________________________________________
Call: survfit(formula = Surv(DX_LASTCONTACT_DEATH_MONTHS, PUF_VITAL_STATUS == 
    0) ~ TNM_CLIN_STAGE_GROUP, data = data)

                         n events median 0.95LCL 0.95UCL
TNM_CLIN_STAGE_GROUP=1  11      3     NA   21.29      NA
TNM_CLIN_STAGE_GROUP=1A  8      5  18.73   12.09      NA
TNM_CLIN_STAGE_GROUP=1B  4      1     NA    4.30      NA
TNM_CLIN_STAGE_GROUP=2B  3      1  23.95   23.95      NA
TNM_CLIN_STAGE_GROUP=3   2      1  14.16   14.16      NA
TNM_CLIN_STAGE_GROUP=3B  1      1   2.04      NA      NA
TNM_CLIN_STAGE_GROUP=4   3      3   4.24    3.15      NA
TNM_CLIN_STAGE_GROUP=4A  8      6   2.35    0.66      NA
TNM_CLIN_STAGE_GROUP=4B  4      2  12.19    2.20      NA
TNM_CLIN_STAGE_GROUP=99  4      3   3.86    1.51      NA

Call: survfit(formula = Surv(DX_LASTCONTACT_DEATH_MONTHS, PUF_VITAL_STATUS == 
    0) ~ TNM_CLIN_STAGE_GROUP, data = data)

                TNM_CLIN_STAGE_GROUP=1 
 time n.risk n.event survival std.err lower 95% CI upper 95% CI
   12      8       2    0.800   0.126        0.587            1
   24      5       1    0.667   0.161        0.415            1
   36      3       0    0.667   0.161        0.415            1
   48      2       0    0.667   0.161        0.415            1

                TNM_CLIN_STAGE_GROUP=1A 
 time n.risk n.event survival std.err lower 95% CI upper 95% CI
   12      6       1    0.857   0.132       0.6334        1.000
   24      2       4    0.286   0.171       0.0886        0.922
   36      2       0    0.286   0.171       0.0886        0.922
   48      1       0    0.286   0.171       0.0886        0.922
   60      1       0    0.286   0.171       0.0886        0.922

                TNM_CLIN_STAGE_GROUP=1B 
 time n.risk n.event survival std.err lower 95% CI upper 95% CI
   12      3       1     0.75   0.217        0.426            1
   24      3       0     0.75   0.217        0.426            1
   36      2       0     0.75   0.217        0.426            1
   48      2       0     0.75   0.217        0.426            1
   60      1       0     0.75   0.217        0.426            1

                TNM_CLIN_STAGE_GROUP=2B 
 time n.risk n.event survival std.err lower 95% CI upper 95% CI
   12      2       0      1.0   0.000        1.000            1
   24      1       1      0.5   0.354        0.125            1
   36      1       0      0.5   0.354        0.125            1
   48      1       0      0.5   0.354        0.125            1

                TNM_CLIN_STAGE_GROUP=3 
 time n.risk n.event survival std.err lower 95% CI upper 95% CI
   12      2       0      1.0   0.000        1.000            1
   24      1       1      0.5   0.354        0.125            1
   36      1       0      0.5   0.354        0.125            1
   48      1       0      0.5   0.354        0.125            1
   60      1       0      0.5   0.354        0.125            1

                TNM_CLIN_STAGE_GROUP=3B 
     time n.risk n.event survival std.err lower 95% CI upper 95% CI

                TNM_CLIN_STAGE_GROUP=4 
     time n.risk n.event survival std.err lower 95% CI upper 95% CI

                TNM_CLIN_STAGE_GROUP=4A 
 time n.risk n.event survival std.err lower 95% CI upper 95% CI
   12      2       6     0.25   0.153       0.0753         0.83
   24      1       0     0.25   0.153       0.0753         0.83
   36      1       0     0.25   0.153       0.0753         0.83
   48      1       0     0.25   0.153       0.0753         0.83
   60      1       0     0.25   0.153       0.0753         0.83

                TNM_CLIN_STAGE_GROUP=4B 
 time n.risk n.event survival std.err lower 95% CI upper 95% CI
   12      3       1     0.75   0.217        0.426            1
   24      2       1     0.50   0.250        0.188            1
   36      2       0     0.50   0.250        0.188            1
   48      1       0     0.50   0.250        0.188            1

                TNM_CLIN_STAGE_GROUP=99 
 time n.risk n.event survival std.err lower 95% CI upper 95% CI
   12      1       3     0.25   0.217       0.0458            1
   24      1       0     0.25   0.217       0.0458            1




   
## Univariable Cox Proportional Hazard Model for:  TNM_CLIN_STAGE_GROUP

Call:
coxph(formula = Surv(DX_LASTCONTACT_DEATH_MONTHS, PUF_VITAL_STATUS == 
    0) ~ TNM_CLIN_STAGE_GROUP, data = data)

  n= 48, number of events= 26 

                           coef exp(coef) se(coef)      z Pr(>|z|)  
TNM_CLIN_STAGE_GROUP1A  0.79183   2.20743  0.73182  1.082   0.2792  
TNM_CLIN_STAGE_GROUP1B -0.31102   0.73270  1.15523 -0.269   0.7878  
TNM_CLIN_STAGE_GROUP2B -0.02213   0.97811  1.15517 -0.019   0.9847  
TNM_CLIN_STAGE_GROUP3   0.38805   1.47411  1.15543  0.336   0.7370  
TNM_CLIN_STAGE_GROUP3B  2.76818  15.92967  1.21635  2.276   0.0229 *
TNM_CLIN_STAGE_GROUP4   2.07853   7.99271  0.85897  2.420   0.0155 *
TNM_CLIN_STAGE_GROUP4A  1.58515   4.88003  0.71180  2.227   0.0260 *
TNM_CLIN_STAGE_GROUP4B  0.55885   1.74866  0.91346  0.612   0.5407  
TNM_CLIN_STAGE_GROUP99  1.49164   4.44436  0.82162  1.815   0.0695 .
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

                       exp(coef) exp(-coef) lower .95 upper .95
TNM_CLIN_STAGE_GROUP1A    2.2074    0.45302   0.52597     9.264
TNM_CLIN_STAGE_GROUP1B    0.7327    1.36482   0.07614     7.051
TNM_CLIN_STAGE_GROUP2B    0.9781    1.02238   0.10165     9.412
TNM_CLIN_STAGE_GROUP3     1.4741    0.67838   0.15312    14.192
TNM_CLIN_STAGE_GROUP3B   15.9297    0.06278   1.46842   172.807
TNM_CLIN_STAGE_GROUP4     7.9927    0.12511   1.48434    43.038
TNM_CLIN_STAGE_GROUP4A    4.8800    0.20492   1.20930    19.693
TNM_CLIN_STAGE_GROUP4B    1.7487    0.57187   0.29185    10.477
TNM_CLIN_STAGE_GROUP99    4.4444    0.22500   0.88806    22.242

Concordance= 0.712  (se = 0.06 )
Rsquare= 0.254   (max possible= 0.976 )
Likelihood ratio test= 14.05  on 9 df,   p=0.1206
Wald test            = 13.94  on 9 df,   p=0.1246
Score (logrank) test = 17.28  on 9 df,   p=0.04454
Removed 1 rows containing missing values (geom_errorbar).



   
## Unadjusted Kaplan Meier Overall Survival Curve for:  TNM_CLIN_STAGE_GROUP

Pathologic T Stage

uni_var(test_var = "TNM_PATH_T", data_imp = data)
_________________________________________________
   
## TNM_PATH_T
_________________________________________________
Call: survfit(formula = Surv(DX_LASTCONTACT_DEATH_MONTHS, PUF_VITAL_STATUS == 
    0) ~ TNM_PATH_T, data = data)

   7 observations deleted due to missingness 
      n  events  median 0.95LCL 0.95UCL 
  41.00   25.00   16.36    7.49      NA 

Call: survfit(formula = Surv(DX_LASTCONTACT_DEATH_MONTHS, PUF_VITAL_STATUS == 
    0) ~ TNM_PATH_T, data = data)

7 observations deleted due to missingness 
 time n.risk n.event survival std.err lower 95% CI upper 95% CI
   12     24      17    0.585  0.0769        0.452        0.757
   24     14       8    0.379  0.0773        0.254        0.565
   36     11       0    0.379  0.0773        0.254        0.565
   48      8       0    0.379  0.0773        0.254        0.565
   60      4       0    0.379  0.0773        0.254        0.565



   
## Univariable Cox Proportional Hazard Model for:  TNM_PATH_T

[1] "Only one level, no Cox model performed"




   
## Unadjusted Kaplan Meier Overall Survival Curve for:  TNM_PATH_T

Pathologic N Stage

uni_var(test_var = "TNM_PATH_N", data_imp = data)
_________________________________________________
   
## TNM_PATH_N
_________________________________________________
Call: survfit(formula = Surv(DX_LASTCONTACT_DEATH_MONTHS, PUF_VITAL_STATUS == 
    0) ~ TNM_PATH_N, data = data)

   7 observations deleted due to missingness 
      n  events  median 0.95LCL 0.95UCL 
  41.00   25.00   16.36    7.49      NA 

Call: survfit(formula = Surv(DX_LASTCONTACT_DEATH_MONTHS, PUF_VITAL_STATUS == 
    0) ~ TNM_PATH_N, data = data)

7 observations deleted due to missingness 
 time n.risk n.event survival std.err lower 95% CI upper 95% CI
   12     24      17    0.585  0.0769        0.452        0.757
   24     14       8    0.379  0.0773        0.254        0.565
   36     11       0    0.379  0.0773        0.254        0.565
   48      8       0    0.379  0.0773        0.254        0.565
   60      4       0    0.379  0.0773        0.254        0.565



   
## Univariable Cox Proportional Hazard Model for:  TNM_PATH_N

[1] "Only one level, no Cox model performed"




   
## Unadjusted Kaplan Meier Overall Survival Curve for:  TNM_PATH_N

Pathologic M Stage

uni_var(test_var = "TNM_PATH_M", data_imp = data)
_________________________________________________
   
## TNM_PATH_M
_________________________________________________
Call: survfit(formula = Surv(DX_LASTCONTACT_DEATH_MONTHS, PUF_VITAL_STATUS == 
    0) ~ TNM_PATH_M, data = data)

   10 observations deleted due to missingness 
      n  events  median 0.95LCL 0.95UCL 
  38.00   24.00   14.16    6.14      NA 

Call: survfit(formula = Surv(DX_LASTCONTACT_DEATH_MONTHS, PUF_VITAL_STATUS == 
    0) ~ TNM_PATH_M, data = data)

10 observations deleted due to missingness 
 time n.risk n.event survival std.err lower 95% CI upper 95% CI
   12     22      16    0.579  0.0801        0.441        0.759
   24     12       8    0.355  0.0795        0.229        0.550
   36      9       0    0.355  0.0795        0.229        0.550
   48      6       0    0.355  0.0795        0.229        0.550
   60      3       0    0.355  0.0795        0.229        0.550



   
## Univariable Cox Proportional Hazard Model for:  TNM_PATH_M

[1] "Only one level, no Cox model performed"




   
## Unadjusted Kaplan Meier Overall Survival Curve for:  TNM_PATH_M

Pathologic Stage Group

uni_var(test_var = "TNM_PATH_STAGE_GROUP", data_imp = data)
_________________________________________________
   
## TNM_PATH_STAGE_GROUP
_________________________________________________
Call: survfit(formula = Surv(DX_LASTCONTACT_DEATH_MONTHS, PUF_VITAL_STATUS == 
    0) ~ TNM_PATH_STAGE_GROUP, data = data)

   15 observations deleted due to missingness 
                         n events median 0.95LCL 0.95UCL
TNM_PATH_STAGE_GROUP=1   3      3   0.66    0.23      NA
TNM_PATH_STAGE_GROUP=1B  2      0     NA      NA      NA
TNM_PATH_STAGE_GROUP=3   2      1  14.16   14.16      NA
TNM_PATH_STAGE_GROUP=3B  1      1   2.04      NA      NA
TNM_PATH_STAGE_GROUP=4A  4      3   1.43    0.56      NA
TNM_PATH_STAGE_GROUP=99 21     12  16.36    8.08      NA

Call: survfit(formula = Surv(DX_LASTCONTACT_DEATH_MONTHS, PUF_VITAL_STATUS == 
    0) ~ TNM_PATH_STAGE_GROUP, data = data)

15 observations deleted due to missingness 
                TNM_PATH_STAGE_GROUP=1 
        time       n.risk      n.event     survival      std.err lower 95% CI upper 95% CI 
     12.0000       1.0000       2.0000       0.3333       0.2722       0.0673       1.0000 

                TNM_PATH_STAGE_GROUP=1B 
 time n.risk n.event survival std.err lower 95% CI upper 95% CI
   12      2       0        1       0            1            1
   24      2       0        1       0            1            1
   36      1       0        1       0            1            1
   48      1       0        1       0            1            1
   60      1       0        1       0            1            1

                TNM_PATH_STAGE_GROUP=3 
 time n.risk n.event survival std.err lower 95% CI upper 95% CI
   12      2       0      1.0   0.000        1.000            1
   24      1       1      0.5   0.354        0.125            1
   36      1       0      0.5   0.354        0.125            1
   48      1       0      0.5   0.354        0.125            1
   60      1       0      0.5   0.354        0.125            1

                TNM_PATH_STAGE_GROUP=3B 
     time n.risk n.event survival std.err lower 95% CI upper 95% CI

                TNM_PATH_STAGE_GROUP=4A 
 time n.risk n.event survival std.err lower 95% CI upper 95% CI
   12      1       3     0.25   0.217       0.0458            1
   24      1       0     0.25   0.217       0.0458            1
   36      1       0     0.25   0.217       0.0458            1
   48      1       0     0.25   0.217       0.0458            1
   60      1       0     0.25   0.217       0.0458            1

                TNM_PATH_STAGE_GROUP=99 
 time n.risk n.event survival std.err lower 95% CI upper 95% CI
   12     12       7    0.635   0.110        0.452        0.892
   24      6       5    0.353   0.113        0.189        0.661
   36      5       0    0.353   0.113        0.189        0.661
   48      3       0    0.353   0.113        0.189        0.661
   60      1       0    0.353   0.113        0.189        0.661




   
## Univariable Cox Proportional Hazard Model for:  TNM_PATH_STAGE_GROUP
Loglik converged before variable  1 ; beta may be infinite. 
Call:
coxph(formula = Surv(DX_LASTCONTACT_DEATH_MONTHS, PUF_VITAL_STATUS == 
    0) ~ TNM_PATH_STAGE_GROUP, data = data)

  n= 33, number of events= 20 
   (15 observations deleted due to missingness)

                             coef  exp(coef)   se(coef)      z Pr(>|z|)  
TNM_PATH_STAGE_GROUP1B -1.953e+01  3.308e-09  6.862e+03 -0.003   0.9977  
TNM_PATH_STAGE_GROUP3  -1.670e+00  1.883e-01  1.161e+00 -1.438   0.1504  
TNM_PATH_STAGE_GROUP3B  4.768e-01  1.611e+00  1.204e+00  0.396   0.6922  
TNM_PATH_STAGE_GROUP4A -4.192e-01  6.576e-01  8.263e-01 -0.507   0.6120  
TNM_PATH_STAGE_GROUP99 -1.212e+00  2.976e-01  6.554e-01 -1.849   0.0644 .
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

                       exp(coef) exp(-coef) lower .95 upper .95
TNM_PATH_STAGE_GROUP1B 3.308e-09  3.023e+08   0.00000       Inf
TNM_PATH_STAGE_GROUP3  1.883e-01  5.312e+00   0.01934     1.833
TNM_PATH_STAGE_GROUP3B 1.611e+00  6.208e-01   0.15206    17.065
TNM_PATH_STAGE_GROUP4A 6.576e-01  1.521e+00   0.13018     3.322
TNM_PATH_STAGE_GROUP99 2.976e-01  3.360e+00   0.08237     1.075

Concordance= 0.689  (se = 0.059 )
Rsquare= 0.256   (max possible= 0.974 )
Likelihood ratio test= 9.76  on 5 df,   p=0.08225
Wald test            = 6.29  on 5 df,   p=0.2794
Score (logrank) test = 10.23  on 5 df,   p=0.069
Transformation introduced infinite values in continuous y-axisTransformation introduced infinite values in continuous y-axisTransformation introduced infinite values in continuous y-axisRemoved 6 rows containing missing values (geom_text).Removed 6 rows containing missing values (geom_text).Removed 6 rows containing missing values (geom_text).Removed 6 rows containing missing values (geom_text).Removed 6 rows containing missing values (geom_text).Removed 1 rows containing missing values (geom_text).



   
## Unadjusted Kaplan Meier Overall Survival Curve for:  TNM_PATH_STAGE_GROUP

Margins

uni_var(test_var = "MARGINS", data_imp = data)
_________________________________________________
   
## MARGINS
_________________________________________________
Call: survfit(formula = Surv(DX_LASTCONTACT_DEATH_MONTHS, PUF_VITAL_STATUS == 
    0) ~ MARGINS, data = data)

                       n events median 0.95LCL 0.95UCL
MARGINS=No Residual    1      0     NA      NA      NA
MARGINS=Not evaluable  1      1   4.24      NA      NA
MARGINS=No surg       42     24  18.73    8.08      NA
MARGINS=Unknown        4      1     NA    7.49      NA
Error in array(xx, dim = dd) : negative length vectors are not allowed

Margins Yes/No

#uni_var(test_var = "MARGINS_YN", data_imp = data)

30 Day Readmission

uni_var(test_var = "READM_HOSP_30_DAYS_F", data_imp = data)
_________________________________________________
   
## READM_HOSP_30_DAYS_F
_________________________________________________
Call: survfit(formula = Surv(DX_LASTCONTACT_DEATH_MONTHS, PUF_VITAL_STATUS == 
    0) ~ READM_HOSP_30_DAYS_F, data = data)

                                            n events median 0.95LCL 0.95UCL
READM_HOSP_30_DAYS_F=No_Surg_or_No_Readmit 47     25  21.29    7.49      NA
READM_HOSP_30_DAYS_F=9                      1      1   8.08      NA      NA

Call: survfit(formula = Surv(DX_LASTCONTACT_DEATH_MONTHS, PUF_VITAL_STATUS == 
    0) ~ READM_HOSP_30_DAYS_F, data = data)

                READM_HOSP_30_DAYS_F=No_Surg_or_No_Readmit 
 time n.risk n.event survival std.err lower 95% CI upper 95% CI
   12     27      17    0.625   0.072        0.498        0.783
   24     16       8    0.429   0.076        0.303        0.607
   36     12       0    0.429   0.076        0.303        0.607
   48      9       0    0.429   0.076        0.303        0.607
   60      4       0    0.429   0.076        0.303        0.607

                READM_HOSP_30_DAYS_F=9 
     time n.risk n.event survival std.err lower 95% CI upper 95% CI




   
## Univariable Cox Proportional Hazard Model for:  READM_HOSP_30_DAYS_F

Call:
coxph(formula = Surv(DX_LASTCONTACT_DEATH_MONTHS, PUF_VITAL_STATUS == 
    0) ~ READM_HOSP_30_DAYS_F, data = data)

  n= 48, number of events= 26 

                        coef exp(coef) se(coef)     z Pr(>|z|)
READM_HOSP_30_DAYS_F9 0.7525    2.1222   1.0296 0.731    0.465

                      exp(coef) exp(-coef) lower .95 upper .95
READM_HOSP_30_DAYS_F9     2.122     0.4712    0.2821     15.97

Concordance= 0.507  (se = 0.016 )
Rsquare= 0.009   (max possible= 0.976 )
Likelihood ratio test= 0.43  on 1 df,   p=0.5114
Wald test            = 0.53  on 1 df,   p=0.4649
Score (logrank) test = 0.56  on 1 df,   p=0.4544
Removed 1 rows containing missing values (geom_errorbar).



   
## Unadjusted Kaplan Meier Overall Survival Curve for:  READM_HOSP_30_DAYS_F

Radiation Type

uni_var(test_var = "RX_SUMM_RADIATION_F", data_imp = data)
_________________________________________________
   
## RX_SUMM_RADIATION_F
_________________________________________________
Call: survfit(formula = Surv(DX_LASTCONTACT_DEATH_MONTHS, PUF_VITAL_STATUS == 
    0) ~ RX_SUMM_RADIATION_F, data = data)

                                    n events median 0.95LCL 0.95UCL
RX_SUMM_RADIATION_F=None           39     19   22.6    4.76      NA
RX_SUMM_RADIATION_F=Beam Radiation  9      7   12.2    8.08      NA

Call: survfit(formula = Surv(DX_LASTCONTACT_DEATH_MONTHS, PUF_VITAL_STATUS == 
    0) ~ RX_SUMM_RADIATION_F, data = data)

                RX_SUMM_RADIATION_F=None 
 time n.risk n.event survival std.err lower 95% CI upper 95% CI
   12     21      15    0.598  0.0804        0.460        0.779
   24     15       4    0.483  0.0831        0.344        0.676
   36     11       0    0.483  0.0831        0.344        0.676
   48      8       0    0.483  0.0831        0.344        0.676
   60      4       0    0.483  0.0831        0.344        0.676

                RX_SUMM_RADIATION_F=Beam Radiation 
 time n.risk n.event survival std.err lower 95% CI upper 95% CI
   12      6       3    0.667   0.157       0.4200         1.00
   24      1       4    0.148   0.133       0.0255         0.86
   36      1       0    0.148   0.133       0.0255         0.86
   48      1       0    0.148   0.133       0.0255         0.86




   
## Univariable Cox Proportional Hazard Model for:  RX_SUMM_RADIATION_F

Call:
coxph(formula = Surv(DX_LASTCONTACT_DEATH_MONTHS, PUF_VITAL_STATUS == 
    0) ~ RX_SUMM_RADIATION_F, data = data)

  n= 48, number of events= 26 

                                    coef exp(coef) se(coef)     z Pr(>|z|)
RX_SUMM_RADIATION_FBeam Radiation 0.3496    1.4185   0.4463 0.783    0.433

                                  exp(coef) exp(-coef) lower .95 upper .95
RX_SUMM_RADIATION_FBeam Radiation     1.419      0.705    0.5915     3.402

Concordance= 0.499  (se = 0.043 )
Rsquare= 0.012   (max possible= 0.976 )
Likelihood ratio test= 0.58  on 1 df,   p=0.4459
Wald test            = 0.61  on 1 df,   p=0.4334
Score (logrank) test = 0.62  on 1 df,   p=0.4312
Removed 1 rows containing missing values (geom_errorbar).



   
## Unadjusted Kaplan Meier Overall Survival Curve for:  RX_SUMM_RADIATION_F

Lymphovascular Invasion

#uni_var(test_var = "LYMPH_VASCULAR_INVASION_F", data_imp = data)

Endoscopic/Robotic

uni_var(test_var = "RX_HOSP_SURG_APPR_2010_F", data_imp = data)
_________________________________________________
   
## RX_HOSP_SURG_APPR_2010_F
_________________________________________________
Call: survfit(formula = Surv(DX_LASTCONTACT_DEATH_MONTHS, PUF_VITAL_STATUS == 
    0) ~ RX_HOSP_SURG_APPR_2010_F, data = data)

                                       n events median 0.95LCL 0.95UCL
RX_HOSP_SURG_APPR_2010_F=No_Surg      42     24   18.7    8.08      NA
RX_HOSP_SURG_APPR_2010_F=Open_Unknown  6      2     NA    7.49      NA

Call: survfit(formula = Surv(DX_LASTCONTACT_DEATH_MONTHS, PUF_VITAL_STATUS == 
    0) ~ RX_HOSP_SURG_APPR_2010_F, data = data)

                RX_HOSP_SURG_APPR_2010_F=No_Surg 
 time n.risk n.event survival std.err lower 95% CI upper 95% CI
   12     24      16    0.610  0.0762        0.477        0.779
   24     13       8    0.393  0.0792        0.264        0.583
   36      9       0    0.393  0.0792        0.264        0.583
   48      7       0    0.393  0.0792        0.264        0.583
   60      4       0    0.393  0.0792        0.264        0.583

                RX_HOSP_SURG_APPR_2010_F=Open_Unknown 
 time n.risk n.event survival std.err lower 95% CI upper 95% CI
   12      3       2      0.6   0.219        0.293            1
   24      3       0      0.6   0.219        0.293            1
   36      3       0      0.6   0.219        0.293            1
   48      2       0      0.6   0.219        0.293            1




   
## Univariable Cox Proportional Hazard Model for:  RX_HOSP_SURG_APPR_2010_F

Call:
coxph(formula = Surv(DX_LASTCONTACT_DEATH_MONTHS, PUF_VITAL_STATUS == 
    0) ~ RX_HOSP_SURG_APPR_2010_F, data = data)

  n= 48, number of events= 26 

                                        coef exp(coef) se(coef)      z Pr(>|z|)
RX_HOSP_SURG_APPR_2010_FOpen_Unknown -0.6234    0.5361   0.7364 -0.847    0.397

                                     exp(coef) exp(-coef) lower .95 upper .95
RX_HOSP_SURG_APPR_2010_FOpen_Unknown    0.5361      1.865    0.1266      2.27

Concordance= 0.531  (se = 0.036 )
Rsquare= 0.018   (max possible= 0.976 )
Likelihood ratio test= 0.86  on 1 df,   p=0.3549
Wald test            = 0.72  on 1 df,   p=0.3973
Score (logrank) test = 0.74  on 1 df,   p=0.3896
Removed 1 rows containing missing values (geom_errorbar).



   
## Unadjusted Kaplan Meier Overall Survival Curve for:  RX_HOSP_SURG_APPR_2010_F

Surgery Radiation Sequence

uni_var(test_var = "SURG_RAD_SEQ", data_imp = data)
_________________________________________________
   
## SURG_RAD_SEQ
_________________________________________________
Call: survfit(formula = Surv(DX_LASTCONTACT_DEATH_MONTHS, PUF_VITAL_STATUS == 
    0) ~ SURG_RAD_SEQ, data = data)

                            n events median 0.95LCL 0.95UCL
SURG_RAD_SEQ=Surg Alone     4      1     NA    4.24      NA
SURG_RAD_SEQ=Surg then Rad  2      1   7.49    7.49      NA
SURG_RAD_SEQ=Rad Alone      7      6  12.19    8.08      NA
SURG_RAD_SEQ=No Treatment  35     18  18.73    4.76      NA

Call: survfit(formula = Surv(DX_LASTCONTACT_DEATH_MONTHS, PUF_VITAL_STATUS == 
    0) ~ SURG_RAD_SEQ, data = data)

                SURG_RAD_SEQ=Surg Alone 
 time n.risk n.event survival std.err lower 95% CI upper 95% CI
   12      2       1    0.667   0.272          0.3            1
   24      2       0    0.667   0.272          0.3            1
   36      2       0    0.667   0.272          0.3            1
   48      1       0    0.667   0.272          0.3            1

                SURG_RAD_SEQ=Surg then Rad 
 time n.risk n.event survival std.err lower 95% CI upper 95% CI
   12      1       1      0.5   0.354        0.125            1
   24      1       0      0.5   0.354        0.125            1
   36      1       0      0.5   0.354        0.125            1
   48      1       0      0.5   0.354        0.125            1

                SURG_RAD_SEQ=Rad Alone 
        time       n.risk      n.event     survival      std.err lower 95% CI upper 95% CI 
      12.000        5.000        2.000        0.714        0.171        0.447        1.000 

                SURG_RAD_SEQ=No Treatment 
 time n.risk n.event survival std.err lower 95% CI upper 95% CI
   12     19      14    0.588  0.0844        0.444        0.779
   24     13       4    0.462  0.0868        0.320        0.668
   36      9       0    0.462  0.0868        0.320        0.668
   48      7       0    0.462  0.0868        0.320        0.668
   60      4       0    0.462  0.0868        0.320        0.668




   
## Univariable Cox Proportional Hazard Model for:  SURG_RAD_SEQ

Call:
coxph(formula = Surv(DX_LASTCONTACT_DEATH_MONTHS, PUF_VITAL_STATUS == 
    0) ~ SURG_RAD_SEQ, data = data)

  n= 48, number of events= 26 

                            coef exp(coef) se(coef)     z Pr(>|z|)
SURG_RAD_SEQSurg then Rad 0.5227    1.6865   1.4150 0.369    0.712
SURG_RAD_SEQRad Alone     1.1819    3.2605   1.0836 1.091    0.275
SURG_RAD_SEQNo Treatment  0.7629    2.1445   1.0278 0.742    0.458

                          exp(coef) exp(-coef) lower .95 upper .95
SURG_RAD_SEQSurg then Rad     1.686     0.5929    0.1053     27.01
SURG_RAD_SEQRad Alone         3.261     0.3067    0.3899     27.27
SURG_RAD_SEQNo Treatment      2.145     0.4663    0.2861     16.08

Concordance= 0.534  (se = 0.049 )
Rsquare= 0.035   (max possible= 0.976 )
Likelihood ratio test= 1.71  on 3 df,   p=0.6351
Wald test            = 1.58  on 3 df,   p=0.664
Score (logrank) test = 1.65  on 3 df,   p=0.6479
Removed 1 rows containing missing values (geom_errorbar).



   
## Unadjusted Kaplan Meier Overall Survival Curve for:  SURG_RAD_SEQ

Surgery Yes/No

uni_var(test_var = "SURGERY_YN", data_imp = data)
_________________________________________________
   
## SURGERY_YN
_________________________________________________
Call: survfit(formula = Surv(DX_LASTCONTACT_DEATH_MONTHS, PUF_VITAL_STATUS == 
    0) ~ SURGERY_YN, data = data)

                n events median 0.95LCL 0.95UCL
SURGERY_YN=No  42     24   18.7    8.08      NA
SURGERY_YN=Yes  6      2     NA    7.49      NA

Call: survfit(formula = Surv(DX_LASTCONTACT_DEATH_MONTHS, PUF_VITAL_STATUS == 
    0) ~ SURGERY_YN, data = data)

                SURGERY_YN=No 
 time n.risk n.event survival std.err lower 95% CI upper 95% CI
   12     24      16    0.610  0.0762        0.477        0.779
   24     13       8    0.393  0.0792        0.264        0.583
   36      9       0    0.393  0.0792        0.264        0.583
   48      7       0    0.393  0.0792        0.264        0.583
   60      4       0    0.393  0.0792        0.264        0.583

                SURGERY_YN=Yes 
 time n.risk n.event survival std.err lower 95% CI upper 95% CI
   12      3       2      0.6   0.219        0.293            1
   24      3       0      0.6   0.219        0.293            1
   36      3       0      0.6   0.219        0.293            1
   48      2       0      0.6   0.219        0.293            1




   
## Univariable Cox Proportional Hazard Model for:  SURGERY_YN

Call:
coxph(formula = Surv(DX_LASTCONTACT_DEATH_MONTHS, PUF_VITAL_STATUS == 
    0) ~ SURGERY_YN, data = data)

  n= 48, number of events= 26 

                 coef exp(coef) se(coef)      z Pr(>|z|)
SURGERY_YNYes -0.6234    0.5361   0.7364 -0.847    0.397

              exp(coef) exp(-coef) lower .95 upper .95
SURGERY_YNYes    0.5361      1.865    0.1266      2.27

Concordance= 0.531  (se = 0.036 )
Rsquare= 0.018   (max possible= 0.976 )
Likelihood ratio test= 0.86  on 1 df,   p=0.3549
Wald test            = 0.72  on 1 df,   p=0.3973
Score (logrank) test = 0.74  on 1 df,   p=0.3896





   
## Unadjusted Kaplan Meier Overall Survival Curve for:  SURGERY_YN

Radiation Yes/No

uni_var(test_var = "RADIATION_YN", data_imp = data)
_________________________________________________
   
## RADIATION_YN
_________________________________________________
Call: survfit(formula = Surv(DX_LASTCONTACT_DEATH_MONTHS, PUF_VITAL_STATUS == 
    0) ~ RADIATION_YN, data = data)

                  n events median 0.95LCL 0.95UCL
RADIATION_YN=No  39     19   22.6    4.76      NA
RADIATION_YN=Yes  9      7   12.2    8.08      NA

Call: survfit(formula = Surv(DX_LASTCONTACT_DEATH_MONTHS, PUF_VITAL_STATUS == 
    0) ~ RADIATION_YN, data = data)

                RADIATION_YN=No 
 time n.risk n.event survival std.err lower 95% CI upper 95% CI
   12     21      15    0.598  0.0804        0.460        0.779
   24     15       4    0.483  0.0831        0.344        0.676
   36     11       0    0.483  0.0831        0.344        0.676
   48      8       0    0.483  0.0831        0.344        0.676
   60      4       0    0.483  0.0831        0.344        0.676

                RADIATION_YN=Yes 
 time n.risk n.event survival std.err lower 95% CI upper 95% CI
   12      6       3    0.667   0.157       0.4200         1.00
   24      1       4    0.148   0.133       0.0255         0.86
   36      1       0    0.148   0.133       0.0255         0.86
   48      1       0    0.148   0.133       0.0255         0.86




   
## Univariable Cox Proportional Hazard Model for:  RADIATION_YN

Call:
coxph(formula = Surv(DX_LASTCONTACT_DEATH_MONTHS, PUF_VITAL_STATUS == 
    0) ~ RADIATION_YN, data = data)

  n= 48, number of events= 26 

                  coef exp(coef) se(coef)     z Pr(>|z|)
RADIATION_YNYes 0.3496    1.4185   0.4463 0.783    0.433

                exp(coef) exp(-coef) lower .95 upper .95
RADIATION_YNYes     1.419      0.705    0.5915     3.402

Concordance= 0.499  (se = 0.043 )
Rsquare= 0.012   (max possible= 0.976 )
Likelihood ratio test= 0.58  on 1 df,   p=0.4459
Wald test            = 0.61  on 1 df,   p=0.4334
Score (logrank) test = 0.62  on 1 df,   p=0.4312





   
## Unadjusted Kaplan Meier Overall Survival Curve for:  RADIATION_YN

Chemo Yes/No

uni_var(test_var = "CHEMO_YN", data_imp = data)
_________________________________________________
   
## CHEMO_YN
_________________________________________________
Call: survfit(formula = Surv(DX_LASTCONTACT_DEATH_MONTHS, PUF_VITAL_STATUS == 
    0) ~ CHEMO_YN, data = data)

              n events median 0.95LCL 0.95UCL
CHEMO_YN=No  19      7     NA   18.73      NA
CHEMO_YN=Yes 29     19   12.2    4.76      NA

Call: survfit(formula = Surv(DX_LASTCONTACT_DEATH_MONTHS, PUF_VITAL_STATUS == 
    0) ~ CHEMO_YN, data = data)

                CHEMO_YN=No 
 time n.risk n.event survival std.err lower 95% CI upper 95% CI
   12     13       4    0.774  0.0997        0.601        0.996
   24      8       3    0.577  0.1238        0.379        0.879
   36      6       0    0.577  0.1238        0.379        0.879
   48      6       0    0.577  0.1238        0.379        0.879
   60      2       0    0.577  0.1238        0.379        0.879

                CHEMO_YN=Yes 
 time n.risk n.event survival std.err lower 95% CI upper 95% CI
   12     14      14    0.517  0.0928        0.364        0.735
   24      8       5    0.328  0.0897        0.192        0.561
   36      6       0    0.328  0.0897        0.192        0.561
   48      3       0    0.328  0.0897        0.192        0.561
   60      2       0    0.328  0.0897        0.192        0.561




   
## Univariable Cox Proportional Hazard Model for:  CHEMO_YN

Call:
coxph(formula = Surv(DX_LASTCONTACT_DEATH_MONTHS, PUF_VITAL_STATUS == 
    0) ~ CHEMO_YN, data = data)

  n= 48, number of events= 26 

              coef exp(coef) se(coef)     z Pr(>|z|)
CHEMO_YNYes 0.6375    1.8918   0.4437 1.437    0.151

            exp(coef) exp(-coef) lower .95 upper .95
CHEMO_YNYes     1.892     0.5286    0.7929     4.514

Concordance= 0.562  (se = 0.051 )
Rsquare= 0.046   (max possible= 0.976 )
Likelihood ratio test= 2.25  on 1 df,   p=0.1339
Wald test            = 2.06  on 1 df,   p=0.1507
Score (logrank) test = 2.13  on 1 df,   p=0.144
Removed 1 rows containing missing values (geom_errorbar).



   
## Unadjusted Kaplan Meier Overall Survival Curve for:  CHEMO_YN

Treatment Yes/No

uni_var(test_var = "Tx_YN", data_imp = data)
_________________________________________________
   
## Tx_YN
_________________________________________________
Call: survfit(formula = Surv(DX_LASTCONTACT_DEATH_MONTHS, PUF_VITAL_STATUS == 
    0) ~ Tx_YN, data = data)

             n events median 0.95LCL 0.95UCL
Tx_YN=FALSE 12      5     NA    2.50      NA
Tx_YN=TRUE  36     21   16.4    7.49      NA

Call: survfit(formula = Surv(DX_LASTCONTACT_DEATH_MONTHS, PUF_VITAL_STATUS == 
    0) ~ Tx_YN, data = data)

                Tx_YN=FALSE 
 time n.risk n.event survival std.err lower 95% CI upper 95% CI
   12      7       4    0.636   0.145        0.407        0.995
   24      6       1    0.545   0.150        0.318        0.936
   36      4       0    0.545   0.150        0.318        0.936
   48      4       0    0.545   0.150        0.318        0.936
   60      2       0    0.545   0.150        0.318        0.936

                Tx_YN=TRUE 
 time n.risk n.event survival std.err lower 95% CI upper 95% CI
   12     20      14    0.602  0.0826        0.460        0.788
   24     10       7    0.373  0.0860        0.237        0.586
   36      8       0    0.373  0.0860        0.237        0.586
   48      5       0    0.373  0.0860        0.237        0.586
   60      2       0    0.373  0.0860        0.237        0.586




   
## Univariable Cox Proportional Hazard Model for:  Tx_YN

Call:
coxph(formula = Surv(DX_LASTCONTACT_DEATH_MONTHS, PUF_VITAL_STATUS == 
    0) ~ Tx_YN, data = data)

  n= 48, number of events= 26 

            coef exp(coef) se(coef)     z Pr(>|z|)
Tx_YNTRUE 0.2905    1.3371   0.5000 0.581    0.561

          exp(coef) exp(-coef) lower .95 upper .95
Tx_YNTRUE     1.337     0.7479    0.5018     3.562

Concordance= 0.503  (se = 0.044 )
Rsquare= 0.007   (max possible= 0.976 )
Likelihood ratio test= 0.36  on 1 df,   p=0.55
Wald test            = 0.34  on 1 df,   p=0.5613
Score (logrank) test = 0.34  on 1 df,   p=0.5599





   
## Unadjusted Kaplan Meier Overall Survival Curve for:  Tx_YN

Metastases at Dx

uni_var(test_var = "mets_at_dx_F", data_imp = data)
_________________________________________________
   
## mets_at_dx_F
_________________________________________________
Call: survfit(formula = Surv(DX_LASTCONTACT_DEATH_MONTHS, PUF_VITAL_STATUS == 
    0) ~ mets_at_dx_F, data = data)

      n  events  median 0.95LCL 0.95UCL 
  48.00   26.00   18.73    8.08      NA 

Call: survfit(formula = Surv(DX_LASTCONTACT_DEATH_MONTHS, PUF_VITAL_STATUS == 
    0) ~ mets_at_dx_F, data = data)

 time n.risk n.event survival std.err lower 95% CI upper 95% CI
   12     27      18    0.611  0.0718        0.485        0.769
   24     16       8    0.419  0.0749        0.295        0.595
   36     12       0    0.419  0.0749        0.295        0.595
   48      9       0    0.419  0.0749        0.295        0.595
   60      4       0    0.419  0.0749        0.295        0.595



   
## Univariable Cox Proportional Hazard Model for:  mets_at_dx_F

Call:
coxph(formula = Surv(DX_LASTCONTACT_DEATH_MONTHS, PUF_VITAL_STATUS == 
    0) ~ mets_at_dx_F, data = data)

  n= 48, number of events= 26 

                 coef exp(coef) se(coef)  z Pr(>|z|)
mets_at_dx_FTRUE    0         1        0 NA       NA

                 exp(coef) exp(-coef) lower .95 upper .95
mets_at_dx_FTRUE         1          1         1         1

Concordance= 0.5  (se = 0 )
Rsquare= 0   (max possible= 0.976 )
Likelihood ratio test= 0  on 1 df,   p=1
Wald test            = NaN  on 1 df,   p=NaN
Score (logrank) test = 0  on 1 df,   p=1
relative range of values =   0 * EPS, is small (axis 0)



   
## Unadjusted Kaplan Meier Overall Survival Curve for:  mets_at_dx_F

Tumor specific Variables

Node Size

Cox Proportional Hazard Ratio

Model #1

Full analysis

model_one <- coxph(Surv(DX_LASTCONTACT_DEATH_MONTHS, PUF_VITAL_STATUS == 0)
                     ~ SURG_RAD_SEQ + INSURANCE_F + AGE + SEX_F + RACE_F + INCOME_F + U_R_F +
                      FACILITY_TYPE_F + FACILITY_LOCATION_F + EDUCATION_F,
                     data = data)
model_one %>% summary()

Summary of Model

model_one %>%
        tidy(., exponentiate = TRUE) %>%
        select(term, estimate, conf.low, conf.high, p.value) %>%
        rename(Variable = term,
               Hazard_Ratio = estimate) %>%
        tbl_df %>%
        print(n = nrow(.))

Linear Regression

#only include rows with known treatment information, n = 48. 0 excluded.
data2 <- data %>% filter(SURGERY_YN != "Ukn" & RADIATION_YN != "Ukn"
                         & CHEMO_YN != "Ukn")
# include only variables with data available for at least 75% of cases (>12)
# from the following set of variables of interest:
## FACILITY_TYPE_F + FACILITY_GEOGRAPHY + CROWFLY + 
##                 DX_STAGING_PROC_DAYS + 
##                 CHEMO_YN + RADIATION_YN + SURGERY_YN + IMMUNO_YN +
##                 AGE + SEX_F + RACE_F + HISPANIC + INSURANCE_F + INCOME_F + 
##                 EDUCATION_F + YEAR_OF_DIAGNOSIS + SITE_TEXT + GRADE_F
length(which(is.na(data2$YEAR_OF_DIAGNOSIS)))
[1] 0
# excluded the following in this analysis due to missing data: 
#  none
fit_surv <- lm(DX_LASTCONTACT_DEATH_MONTHS ~
                 FACILITY_GEOGRAPHY + CROWFLY + DX_STAGING_PROC_DAYS +
                 CHEMO_YN + IMMUNO_YN +
                 AGE + SEX_F + RACE_F + INSURANCE_F + 
                 YEAR_OF_DIAGNOSIS,
   data = data2)
summary(fit_surv) # R^2 = , p = 

Call:
lm(formula = DX_LASTCONTACT_DEATH_MONTHS ~ FACILITY_GEOGRAPHY + 
    CROWFLY + DX_STAGING_PROC_DAYS + CHEMO_YN + IMMUNO_YN + AGE + 
    SEX_F + RACE_F + INSURANCE_F + YEAR_OF_DIAGNOSIS, data = data2)

Residuals:
    Min      1Q  Median      3Q     Max 
-22.562  -3.359   0.000   3.823  19.380 

Coefficients:
                           Estimate Std. Error t value Pr(>|t|)   
(Intercept)               166.23394   37.57341   4.424  0.00129 **
FACILITY_GEOGRAPHYSouth     7.27975   10.31614   0.706  0.49651   
FACILITY_GEOGRAPHYMidwest   9.10588   11.24548   0.810  0.43694   
FACILITY_GEOGRAPHYWest    -11.25083   15.25596  -0.737  0.47778   
CROWFLY                    -0.02306    0.05525  -0.417  0.68523   
DX_STAGING_PROC_DAYS        0.14873    0.19684   0.756  0.46731   
CHEMO_YNYes               -31.91791   11.87644  -2.687  0.02280 * 
IMMUNO_YNYes               21.35550   16.07901   1.328  0.21364   
AGE                        -1.69099    0.49103  -3.444  0.00629 **
SEX_FFemale                 6.69829    8.38290   0.799  0.44283   
RACE_FBlack                15.54313   13.04704   1.191  0.26104   
RACE_FOther/Unk            19.15127   27.10491   0.707  0.49597   
RACE_FAsian                27.99541   19.24807   1.454  0.17648   
INSURANCE_FNone            -6.07965   15.59046  -0.390  0.70474   
INSURANCE_FMedicaid        11.72408   20.84382   0.562  0.58618   
INSURANCE_FMedicare        31.38030   15.01753   2.090  0.06317 . 
YEAR_OF_DIAGNOSIS2011      -0.35832   22.11062  -0.016  0.98739   
YEAR_OF_DIAGNOSIS2012     -43.54602   19.95942  -2.182  0.05409 . 
YEAR_OF_DIAGNOSIS2013     -59.57859   18.09339  -3.293  0.00811 **
YEAR_OF_DIAGNOSIS2014     -54.32287   14.47714  -3.752  0.00377 **
YEAR_OF_DIAGNOSIS2015     -44.01667   15.71079  -2.802  0.01874 * 
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 15.91 on 10 degrees of freedom
  (17 observations deleted due to missingness)
Multiple R-squared:  0.8785,    Adjusted R-squared:  0.6356 
F-statistic: 3.616 on 20 and 10 DF,  p-value: 0.02054
# the following variables were excluded to 
# improve the R-squared of the regression (initially R^2 = ):
# GRADE_F (all were the same), SITE_TEXT, HISPANIC, FACILITY_TYPE_F,
# EDUCATION_F, SURGERY_YN, RADIATION_YN, INCOME_F, EDUCATION_F 

Prediction Logistic Regression Models

Surgery

no_Ukns <- data %>%
  filter(SURGERY_YN != "Ukn") %>% 
  droplevels() %>% 
  mutate(SURGERY_YN = as.logical(SURGERY_YN))
fit_surg <- glm(SURG_TF ~ 
                 FACILITY_TYPE_F + 
                 CHEMO_YN + RADIATION_YN + 
                 AGE + SEX_F + RACE_F + INCOME_F + 
                 YEAR_OF_DIAGNOSIS,
   data = no_Ukns)
summary(fit_surg)

Call:
glm(formula = SURG_TF ~ FACILITY_TYPE_F + CHEMO_YN + RADIATION_YN + 
    AGE + SEX_F + RACE_F + INCOME_F + YEAR_OF_DIAGNOSIS, data = no_Ukns)

Deviance Residuals: 
     Min        1Q    Median        3Q       Max  
-0.52247  -0.13209  -0.02420   0.08866   0.78602  

Coefficients:
                                              Estimate Std. Error t value Pr(>|t|)  
(Intercept)                                  -1.228819   0.665972  -1.845   0.0815 .
FACILITY_TYPE_FComprehensive Comm Ca Program  0.541501   0.440128   1.230   0.2344  
FACILITY_TYPE_FAcademic/Research Program      0.495231   0.406177   1.219   0.2385  
FACILITY_TYPE_FIntegrated Network Ca Program  0.780425   0.453323   1.722   0.1023  
CHEMO_YNYes                                   0.248205   0.154196   1.610   0.1249  
RADIATION_YNYes                               0.116626   0.151406   0.770   0.4511  
AGE                                           0.003365   0.005590   0.602   0.5548  
SEX_FFemale                                   0.199961   0.144360   1.385   0.1829  
RACE_FBlack                                  -0.109713   0.229457  -0.478   0.6383  
RACE_FOther/Unk                              -0.054007   0.290836  -0.186   0.8548  
RACE_FAsian                                  -0.211848   0.362495  -0.584   0.5662  
INCOME_F$38,000 - $47,999                     0.221787   0.201701   1.100   0.2860  
INCOME_F$48,000 - $62,999                     0.050883   0.198858   0.256   0.8009  
INCOME_F$63,000 +                             0.413609   0.188578   2.193   0.0417 *
YEAR_OF_DIAGNOSIS2011                        -0.077667   0.359923  -0.216   0.8316  
YEAR_OF_DIAGNOSIS2012                        -0.043183   0.241029  -0.179   0.8598  
YEAR_OF_DIAGNOSIS2013                         0.467585   0.231423   2.020   0.0585 .
YEAR_OF_DIAGNOSIS2014                         0.338811   0.227568   1.489   0.1538  
YEAR_OF_DIAGNOSIS2015                         0.054832   0.269407   0.204   0.8410  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

(Dispersion parameter for gaussian family taken to be 0.09646308)

    Null deviance: 3.5676  on 36  degrees of freedom
Residual deviance: 1.7363  on 18  degrees of freedom
  (11 observations deleted due to missingness)
AIC: 31.813

Number of Fisher Scoring iterations: 2
# the following variables were excluded to improve the model:
# GRADE_F (all were the same), SITE_TEXT, HISPANIC, FACILITY_TYPE_F,
# EDUCATION_F, RADIATION_YN, INCOME_F, EDUCATION_F 
exp(cbind("Odds ratio" = coef(fit_surg), confint.default(fit_surg, level = 0.95)))
                                             Odds ratio      2.5 %   97.5 %
(Intercept)                                   0.2926379 0.07933299 1.079462
FACILITY_TYPE_FComprehensive Comm Ca Program  1.7185844 0.72532577 4.072008
FACILITY_TYPE_FAcademic/Research Program      1.6408778 0.74018127 3.637595
FACILITY_TYPE_FIntegrated Network Ca Program  2.1823992 0.89756240 5.306446
CHEMO_YNYes                                   1.2817228 0.94742016 1.733986
RADIATION_YNYes                               1.1236992 0.83516723 1.511913
AGE                                           1.0033702 0.99243722 1.014424
SEX_FFemale                                   1.2213552 0.92037082 1.620769
RACE_FBlack                                   0.8960914 0.57152882 1.404968
RACE_FOther/Unk                               0.9474251 0.53577787 1.675348
RACE_FAsian                                   0.8090880 0.39759358 1.646464
INCOME_F$38,000 - $47,999                     1.2483050 0.84068280 1.853571
INCOME_F$48,000 - $62,999                     1.0521995 0.71257440 1.553696
INCOME_F$63,000 +                             1.5122655 1.04498439 2.188499
YEAR_OF_DIAGNOSIS2011                         0.9252725 0.45698579 1.873426
YEAR_OF_DIAGNOSIS2012                         0.9577363 0.59714724 1.536068
YEAR_OF_DIAGNOSIS2013                         1.5961353 1.01410274 2.512219
YEAR_OF_DIAGNOSIS2014                         1.4032776 0.89833261 2.192048
YEAR_OF_DIAGNOSIS2015                         1.0563636 0.62300826 1.791154

Chemo

Radiation

Immunotherapy

Any Treatment

no_Ukns <- data %>%
  filter(Tx_YN != "Ukn") %>%
  droplevels()
fit_tx <- glm(Tx_YN ~ FACILITY_TYPE_F + FACILITY_GEOGRAPHY +
                 AGE + SEX_F + RACE_F + INSURANCE_F + INCOME_F + 
                 EDUCATION_F + YEAR_OF_DIAGNOSIS,
   data = no_Ukns)
summary(fit_tx)

Call:
glm(formula = Tx_YN ~ FACILITY_TYPE_F + FACILITY_GEOGRAPHY + 
    AGE + SEX_F + RACE_F + INSURANCE_F + INCOME_F + EDUCATION_F + 
    YEAR_OF_DIAGNOSIS, data = no_Ukns)

Deviance Residuals: 
     Min        1Q    Median        3Q       Max  
-0.52890  -0.09865   0.00000   0.08582   0.65016  

Coefficients:
                                              Estimate Std. Error t value Pr(>|t|)  
(Intercept)                                  -0.697114   1.535631  -0.454   0.6596  
FACILITY_TYPE_FComprehensive Comm Ca Program  0.032096   1.148611   0.028   0.9783  
FACILITY_TYPE_FAcademic/Research Program      0.219129   1.039877   0.211   0.8373  
FACILITY_TYPE_FIntegrated Network Ca Program  0.038149   0.910039   0.042   0.9674  
FACILITY_GEOGRAPHYSouth                       0.098687   0.375467   0.263   0.7980  
FACILITY_GEOGRAPHYMidwest                    -0.304541   0.311524  -0.978   0.3513  
FACILITY_GEOGRAPHYWest                        0.391416   0.399375   0.980   0.3502  
AGE                                          -0.004941   0.011642  -0.424   0.6802  
SEX_FFemale                                  -0.112370   0.330255  -0.340   0.7407  
RACE_FBlack                                   0.259911   0.488445   0.532   0.6063  
RACE_FOther/Unk                               0.925809   0.718425   1.289   0.2265  
RACE_FAsian                                  -0.971713   0.783281  -1.241   0.2431  
INSURANCE_FNone                              -0.487590   0.638215  -0.764   0.4625  
INSURANCE_FMedicaid                          -0.540467   0.711507  -0.760   0.4650  
INSURANCE_FMedicare                           0.194082   0.537306   0.361   0.7255  
INSURANCE_FOther Government                  -0.191456   1.419989  -0.135   0.8954  
INCOME_F$38,000 - $47,999                    -0.175331   0.549074  -0.319   0.7561  
INCOME_F$48,000 - $62,999                    -0.752120   0.596470  -1.261   0.2359  
INCOME_F$63,000 +                            -0.701650   0.676859  -1.037   0.3243  
EDUCATION_F13 - 20.9%                         0.865229   0.500067   1.730   0.1143  
EDUCATION_F7 - 12.9%                          1.611678   0.701770   2.297   0.0445 *
EDUCATION_FLess than 7%                       1.521624   0.679106   2.241   0.0490 *
YEAR_OF_DIAGNOSIS2011                         0.939653   0.778316   1.207   0.2551  
YEAR_OF_DIAGNOSIS2012                         0.855921   0.563313   1.519   0.1596  
YEAR_OF_DIAGNOSIS2013                         0.989823   0.553169   1.789   0.1038  
YEAR_OF_DIAGNOSIS2014                         0.743443   0.677944   1.097   0.2985  
YEAR_OF_DIAGNOSIS2015                         1.290167   0.556770   2.317   0.0430 *
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

(Dispersion parameter for gaussian family taken to be 0.2175182)

    Null deviance: 7.2973  on 36  degrees of freedom
Residual deviance: 2.1752  on 10  degrees of freedom
  (11 observations deleted due to missingness)
AIC: 56.151

Number of Fisher Scoring iterations: 2
exp(cbind("Odds ratio" = coef(fit_rads), confint.default(fit_tx, level = 0.95)))
number of rows of result is not a multiple of vector length (arg 1)
                                             Odds ratio      2.5 %    97.5 %
(Intercept)                                   1.8297836 0.02455364 10.101330
FACILITY_TYPE_FComprehensive Comm Ca Program  0.8621574 0.10870254  9.809304
FACILITY_TYPE_FAcademic/Research Program      0.4876133 0.16218894  9.556781
FACILITY_TYPE_FIntegrated Network Ca Program  0.7718355 0.17455858  6.182929
FACILITY_GEOGRAPHYSouth                       0.7623553 0.52876359  2.303866
FACILITY_GEOGRAPHYMidwest                     1.3008497 0.40047030  1.358029
FACILITY_GEOGRAPHYWest                        0.7500351 0.67614714  3.235479
AGE                                           0.7699909 0.97262357  1.018037
SEX_FFemale                                   0.6492832 0.46782658  1.707308
RACE_FBlack                                   0.7980793 0.49786621  3.377872
RACE_FOther/Unk                               1.0581502 0.61737505 10.318069
RACE_FAsian                                   0.7098408 0.08151931  1.756793
INSURANCE_FNone                               1.2114767 0.17578957  2.145318
INSURANCE_FMedicaid                           1.2112700 0.14442502  2.349169
INSURANCE_FMedicare                           1.0316648 0.42357735  3.480523
INSURANCE_FOther Government                   1.0738527 0.05106869 13.352086
INCOME_F$38,000 - $47,999                     0.7020120 0.28607662  2.461656
INCOME_F$48,000 - $62,999                     0.6907555 0.14643420  1.517310
INCOME_F$63,000 +                             1.0021452 0.13156313  1.868189
EDUCATION_F13 - 20.9%                         0.6759286 0.89146852  6.330269
EDUCATION_F7 - 12.9%                          0.5257933 1.26646994 19.828527
EDUCATION_FLess than 7%                       0.6249400 1.20997711 17.333610
YEAR_OF_DIAGNOSIS2011                         0.8512837 0.55665013 11.764948
YEAR_OF_DIAGNOSIS2012                         0.5668372 0.78024147  7.099289
YEAR_OF_DIAGNOSIS2013                         0.6120539 0.90994834  7.956692
YEAR_OF_DIAGNOSIS2014                         0.9904401 0.55693709  7.942184
YEAR_OF_DIAGNOSIS2015                         0.9542141 1.22008168 10.820214

Metastasis at Time of Diagnosis

LS0tCnRpdGxlOiAiUHJpbWFyeSBDdXRhbmVvdXMgR2FtbWEtRGVsdGEgVC1jZWxsIEx5bXBob21hIgphdXRob3I6ICJSYW1pZSBGYXRoeSIKZGF0ZTogIjEyLzE2LzIwMTkiCm91dHB1dDoKICBodG1sX25vdGVib29rOgogICAgdGhlbWU6IHVuaXRlZAogICAgdG9jOiB5ZXMKICAgIHRvY19mbG9hdDogeWVzCiAgaHRtbF9kb2N1bWVudDoKICAgIHRvYzogeWVzCi0tLQoKYGBge3IsIGVjaG89RkFMU0UsIHdhcm5pbmc9RkFMU0UsIG1lc3NhZ2U9RkFMU0V9CgpsaWJyYXJ5KCJnZ3Bsb3QyIikKbGlicmFyeSgiZHBseXIiKQpsaWJyYXJ5KCJ0aWR5ciIpCmxpYnJhcnkoImtuaXRyIikKbGlicmFyeSgidGFibGVvbmUiKQpsaWJyYXJ5KCJmb3JjYXRzIikKbGlicmFyeSgic3Vydml2YWwiKQpsaWJyYXJ5KCJucHN1cnYiKQpsaWJyYXJ5KCJicm9vbSIpCmxpYnJhcnkoInRpYmJsZSIpCmxpYnJhcnkoInJlYWRyIikKbGlicmFyeSgic3Vydm1pbmVyIikKbGlicmFyeSgic3RyaW5nciIpCgoKa25pdHI6Om9wdHNfY2h1bmskc2V0KGVjaG89VFJVRSwgd2FybmluZz1GQUxTRSwgbWVzc2FnZT1UUlVFKQonJSFpbiUnIDwtIGZ1bmN0aW9uKHgseSkhKCclaW4lJyh4LHkpKQpgYGAKCmBgYHtyfQpwX3RhYmxlIDwtIGZ1bmN0aW9uKHRhYl9kYXRhLCAuLi4pIHsKICB0YWJfZGF0YV8yIDwtIGRlcGFyc2Uoc3Vic3RpdHV0ZSh0YWJfZGF0YSkpCiAgCiAgdGFibGVfcCA8LSBkby5jYWxsKENyZWF0ZVRhYmxlT25lLCAKICAgICAgICAgICAgICAgICAgICAgbGlzdChkYXRhID0gYXMubmFtZSh0YWJfZGF0YV8yKSwgaW5jbHVkZU5BID0gVFJVRSwgLi4uKSkKICB0YWJsZV9wX291dCA8LSBwcmludCh0YWJsZV9wLAogICAgICAgICAgICAgICAgICAgICAgIHNob3dBbGxMZXZlbHMgPSBUUlVFLAogICAgICAgICAgICAgICAgICAgICAgIHByaW50VG9nZ2xlID0gRkFMU0UpCiAga2FibGUodGFibGVfcF9vdXQsCiAgICAgICAgYWxpZ24gPSAiYyIpCn0KYGBgCgpgYGB7cn0KdW5pX3ZhciA8LSBmdW5jdGlvbih0ZXN0X3ZhciwgZGF0YV9pbXApIHsKCiAgICAgICAgICAgICAgICAKICAgICAgICBjYXQoIl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18iKQogICAgICAgIGNhdCgiXG4iKQogICAgICAgIGNhdCgiICAgXG4jIyIsIHRlc3RfdmFyKQogICAgICAgIGNhdCgiXG4iKQogICAgICAgIGNhdCgiX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXyIpCiAgICAgICAgY2F0KCJcbiIpCgogICAgICAgIAogICAgICAgIGYgPC0gYXMuZm9ybXVsYShwYXN0ZSgiU3VydihEWF9MQVNUQ09OVEFDVF9ERUFUSF9NT05USFMsIFBVRl9WSVRBTF9TVEFUVVMgPT0gMCkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcy5uYW1lKHRlc3RfdmFyKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VwID0gIiB+ICIgKSkKICAgICAgICAKICAgICAgICBkYXRhX2ltcF8yIDwtIGRlcGFyc2Uoc3Vic3RpdHV0ZShkYXRhX2ltcCkpCgogICAgICAgIGttX2ZpdCA8LSBkby5jYWxsKCJzdXJ2Zml0IiwgbGlzdChmb3JtdWxhID0gZiwgZGF0YSA9IGFzLm5hbWUoZGF0YV9pbXBfMikpKQoKICAgICAgICBwcmludChrbV9maXQpCiAgICAgICAgY2F0KCJcbiIpCgogICAgICAgIHByaW50KHN1bW1hcnkoa21fZml0LCB0aW1lcyA9IGMoMTIsIDI0LCAzNiwgNDgsIDYwLCAxMjApKSkKICAgICAgICBjYXQoIlxuIikKCgogICAgICAgIGNhdCgiXG4iKQogICAgICAgIGNhdCgiXG4iKQogICAgICAgIGNhdCgiICAgXG4jIyBVbml2YXJpYWJsZSBDb3ggUHJvcG9ydGlvbmFsIEhhemFyZCBNb2RlbCBmb3I6ICIsIHRlc3RfdmFyKQogICAgICAgIGNhdCgiXG4iKQogICAgICAgIGNhdCgiXG4iKQoKCiAgICAgICAgbl9sZXZlbHMgPC0gbmxldmVscyhkYXRhX2ltcFtbdGVzdF92YXJdXSkKCiAgICAgICAgaWYobl9sZXZlbHMgPT0gMSl7CiAgICAgICAgICAgICAgICBwcmludCgiT25seSBvbmUgbGV2ZWwsIG5vIENveCBtb2RlbCBwZXJmb3JtZWQiKQogICAgICAgICAgICAgICAgY2F0KCJcbiIpCgogICAgICAgIH0gZWxzZSB7CgoKICAgICAgICAgICAgICAgIGNveF9maXQgPC0gZG8uY2FsbCgiY294cGgiLCBsaXN0KGZvcm11bGEgPSBmLCBkYXRhID0gYXMubmFtZShkYXRhX2ltcF8yKSkpCgogICAgICAgICAgICAgICAgcHJpbnQoc3VtbWFyeShjb3hfZml0KSkKICAgICAgICAgICAgICAgIGNhdCgiXG4iKQogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICBkby5jYWxsKCJnZ2ZvcmVzdCIsCiAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0KG1vZGVsID0gY294X2ZpdCwgZGF0YSA9IGFzLm5hbWUoZGF0YV9pbXBfMikpKQoKCiAgICAgICAgfQoKICAgICAgICBjYXQoIlxuIikKICAgICAgICBjYXQoIlxuIikKICAgICAgICBjYXQoIlxuIikKICAgICAgICBjYXQoIiAgIFxuIyMgVW5hZGp1c3RlZCBLYXBsYW4gTWVpZXIgT3ZlcmFsbCBTdXJ2aXZhbCBDdXJ2ZSBmb3I6ICIsIHRlc3RfdmFyKQoKCiAgICAgICAgcCA8LSBkby5jYWxsKCJnZ3N1cnZwbG90IiwKICAgICAgICAgICAgICAgICAgICAgbGlzdChmaXQgPSBrbV9maXQsIGRhdGEgPSBhcy5uYW1lKGRhdGFfaW1wXzIpLAogICAgICAgICAgICAgICAgICAgICAgICAgIHBhbGV0dGUgPSAiamNvIiwgY2Vuc29yID0gRkFMU0UsIGxlZ2VuZCA9ICJyaWdodCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZXR5cGUgPSAic3RyYXRhIiwgeGxhYiA9ICJUaW1lIChNb250aHMpIikpCgogICAgICAgIHByaW50KHApCgp9CgpgYGAKCmBgYHtyIGNodW5rMiwgY2FjaGU9VFJVRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgcmVzdWx0cz0naGlkZSd9CmNvbC53aWR0aCA8LSBjKDM3LCAxMCwgMSwgMSwgMywgMSwgMiwgMSwgMiwgMSwgMSwgMSwgMSwgMSwgMSwgOCwgMiwgMiwgMiwgNCwgNCwgMSwgNCwgMSwgMSwKICAgICAgICAgICAgICAgMSwgMywgMiwgMiwgOCwgMiwgNSwgNSwgNSwgNCwgNSwgNSwgNSw0LCAyLCAxLCAyLCAxLCAzLCAxLCAxLCAxLCAxLCAxLCAxLCAzLAogICAgICAgICAgICAgICAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCA2LCA4LAogICAgICAgICAgICAgICA4LCA4LCAyLCAxLCAxLCAxLCAxLCA4LCAxLCAxLCA4LCAxLCAxLCAyLCAyLCA1LCAyLCA1LCAzLCAxLCAzLCAxLCA4LCA4LCAyLCA4LAogICAgICAgICAgICAgICAyLCA4LCAyLCAyLCAxLCA4LCAxLCAxLCAxLCAxLCAxLCA4LCAxLCAyLCAyLCAyLCAyLCAyLCAxLCAxLCAxLCAyLCAxLCAzLCAxLCAxLAogICAgICAgICAgICAgICAxLCAxLCAxLCAxLCAxLCAxLCAxKQoKY29sLm5hbWVzLmFiciA8LSBjKCJQVUZfQ0FTRV9JRCIsICJQVUZfRkFDSUxJVFlfSUQiLCAiRkFDSUxJVFlfVFlQRV9DRCIsICJGQUNJTElUWV9MT0NBVElPTl9DRCIsCiAgICAgICAgICAgICAgICAgICAiQUdFIiwgIlNFWCIsICJSQUNFIiwgIlNQQU5JU0hfSElTUEFOSUNfT1JJR0lOIiwgIklOU1VSQU5DRV9TVEFUVVMiLAogICAgICAgICAgICAgICAgICAgIk1FRF9JTkNfUVVBUl8wMCIsICJOT19IU0RfUVVBUl8wMCIsICJVUl9DRF8wMyIsICJNRURfSU5DX1FVQVJfMTIiLCAiTk9fSFNEX1FVQVJfMTIiLAogICAgICAgICAgICAgICAgICAgIlVSX0NEXzEzIiwgIkNST1dGTFkiLCAiQ0RDQ19UT1RBTF9CRVNUIiwgIlNFUVVFTkNFX05VTUJFUiIsICJDTEFTU19PRl9DQVNFIiwKICAgICAgICAgICAgICAgICAgICJZRUFSX09GX0RJQUdOT1NJUyIsICJQUklNQVJZX1NJVEUiLCAiTEFURVJBTElUWSIsICJISVNUT0xPR1kiLCAiQkVIQVZJT1IiLCAiR1JBREUiLAogICAgICAgICAgICAgICAgICAgIkRJQUdOT1NUSUNfQ09ORklSTUFUSU9OIiwgIlRVTU9SX1NJWkUiLCAiUkVHSU9OQUxfTk9ERVNfUE9TSVRJVkUiLAogICAgICAgICAgICAgICAgICAgIlJFR0lPTkFMX05PREVTX0VYQU1JTkVEIiwgIkRYX1NUQUdJTkdfUFJPQ19EQVlTIiwgIlJYX1NVTU1fRFhTVEdfUFJPQyIsICJUTk1fQ0xJTl9UIiwKICAgICAgICAgICAgICAgICAgICJUTk1fQ0xJTl9OIiwgIlROTV9DTElOX00iLCAiVE5NX0NMSU5fU1RBR0VfR1JPVVAiLCAiVE5NX1BBVEhfVCIsICJUTk1fUEFUSF9OIiwgIlROTV9QQVRIX00iLAogICAgICAgICAgICAgICAgICAgIlROTV9QQVRIX1NUQUdFX0dST1VQIiwgIlROTV9FRElUSU9OX05VTUJFUiIsICJBTkFMWVRJQ19TVEFHRV9HUk9VUCIsICJDU19NRVRTX0FUX0RYIiwKICAgICAgICAgICAgICAgICAgICJDU19NRVRTX0VWQUwiLCAiQ1NfRVhURU5TSU9OIiwgIkNTX1RVTU9SX1NJWkVFWFRfRVZBTCIsICJDU19NRVRTX0RYX0JPTkUiLCAiQ1NfTUVUU19EWF9CUkFJTiIsCiAgICAgICAgICAgICAgICAgICAiQ1NfTUVUU19EWF9MSVZFUiIsICJDU19NRVRTX0RYX0xVTkciLCAiTFlNUEhfVkFTQ1VMQVJfSU5WQVNJT04iLCAiQ1NfU0lURVNQRUNJRklDX0ZBQ1RPUl8xIiwKICAgICAgICAgICAgICAgICAgICJDU19TSVRFU1BFQ0lGSUNfRkFDVE9SXzIiLCAiQ1NfU0lURVNQRUNJRklDX0ZBQ1RPUl8zIiwgIkNTX1NJVEVTUEVDSUZJQ19GQUNUT1JfNCIsCiAgICAgICAgICAgICAgICAgICAiQ1NfU0lURVNQRUNJRklDX0ZBQ1RPUl81IiwgIkNTX1NJVEVTUEVDSUZJQ19GQUNUT1JfNiIsICJDU19TSVRFU1BFQ0lGSUNfRkFDVE9SXzciLAogICAgICAgICAgICAgICAgICAgIkNTX1NJVEVTUEVDSUZJQ19GQUNUT1JfOCIsICJDU19TSVRFU1BFQ0lGSUNfRkFDVE9SXzkiLCAiQ1NfU0lURVNQRUNJRklDX0ZBQ1RPUl8xMCIsCiAgICAgICAgICAgICAgICAgICAiQ1NfU0lURVNQRUNJRklDX0ZBQ1RPUl8xMSIsICJDU19TSVRFU1BFQ0lGSUNfRkFDVE9SXzEyIiwgIkNTX1NJVEVTUEVDSUZJQ19GQUNUT1JfMTMiLAogICAgICAgICAgICAgICAgICAgIkNTX1NJVEVTUEVDSUZJQ19GQUNUT1JfMTQiLCAiQ1NfU0lURVNQRUNJRklDX0ZBQ1RPUl8xNSIsICJDU19TSVRFU1BFQ0lGSUNfRkFDVE9SXzE2IiwKICAgICAgICAgICAgICAgICAgICJDU19TSVRFU1BFQ0lGSUNfRkFDVE9SXzE3IiwgIkNTX1NJVEVTUEVDSUZJQ19GQUNUT1JfMTgiLCAiQ1NfU0lURVNQRUNJRklDX0ZBQ1RPUl8xOSIsCiAgICAgICAgICAgICAgICAgICAiQ1NfU0lURVNQRUNJRklDX0ZBQ1RPUl8yMCIsICJDU19TSVRFU1BFQ0lGSUNfRkFDVE9SXzIxIiwgIkNTX1NJVEVTUEVDSUZJQ19GQUNUT1JfMjIiLAogICAgICAgICAgICAgICAgICAgIkNTX1NJVEVTUEVDSUZJQ19GQUNUT1JfMjMiLCAiQ1NfU0lURVNQRUNJRklDX0ZBQ1RPUl8yNCIsICJDU19TSVRFU1BFQ0lGSUNfRkFDVE9SXzI1IiwKICAgICAgICAgICAgICAgICAgICJDU19WRVJTSU9OX0xBVEVTVCIsICJEWF9SWF9TVEFSVEVEX0RBWVMiLCAiRFhfU1VSR19TVEFSVEVEX0RBWVMiLCAiRFhfREVGU1VSR19TVEFSVEVEX0RBWVMiLAogICAgICAgICAgICAgICAgICAgIlJYX1NVTU1fU1VSR19QUklNX1NJVEUiLCAiUlhfSE9TUF9TVVJHX0FQUFJfMjAxMCIsICJSWF9TVU1NX1NVUkdJQ0FMX01BUkdJTlMiLAogICAgICAgICAgICAgICAgICAgIlJYX1NVTU1fU0NPUEVfUkVHX0xOX1NVUiIsICJSWF9TVU1NX1NVUkdfT1RIX1JFR0RJUyIsICJTVVJHX0RJU0NIQVJHRV9EQVlTIiwgIlJFQURNX0hPU1BfMzBfREFZUyIsCiAgICAgICAgICAgICAgICAgICAiUkVBU09OX0ZPUl9OT19TVVJHRVJZIiwgIkRYX1JBRF9TVEFSVEVEX0RBWVMiLCAiUlhfU1VNTV9SQURJQVRJT04iLCAiUkFEX0xPQ0FUSU9OX09GX1JYIiwKICAgICAgICAgICAgICAgICAgICJSQURfVFJFQVRfVk9MIiwgIlJBRF9SRUdJT05BTF9SWF9NT0RBTElUWSIsICJSQURfUkVHSU9OQUxfRE9TRV9DR1kiLCAiUkFEX0JPT1NUX1JYX01PREFMSVRZIiwKICAgICAgICAgICAgICAgICAgICJSQURfQk9PU1RfRE9TRV9DR1kiLCAiUkFEX05VTV9UUkVBVF9WT0wiLCAiUlhfU1VNTV9TVVJHUkFEX1NFUSIsICJSQURfRUxBUFNFRF9SWF9EQVlTIiwKICAgICAgICAgICAgICAgICAgICJSRUFTT05fRk9SX05PX1JBRElBVElPTiIsICJEWF9TWVNURU1JQ19TVEFSVEVEX0RBWVMiLCAiRFhfQ0hFTU9fU1RBUlRFRF9EQVlTIiwgIlJYX1NVTU1fQ0hFTU8iLAogICAgICAgICAgICAgICAgICAgIkRYX0hPUk1PTkVfU1RBUlRFRF9EQVlTIiwgIlJYX1NVTU1fSE9STU9ORSIsICJEWF9JTU1VTk9fU1RBUlRFRF9EQVlTIiwgIlJYX1NVTU1fSU1NVU5PVEhFUkFQWSIsCiAgICAgICAgICAgICAgICAgICAiUlhfU1VNTV9UUk5TUExOVF9FTkRPIiwgIlJYX1NVTU1fU1lTVEVNSUNfU1VSX1NFUSIsICJEWF9PVEhFUl9TVEFSVEVEX0RBWVMiLCAiUlhfU1VNTV9PVEhFUiIsCiAgICAgICAgICAgICAgICAgICAiUEFMTElBVElWRV9DQVJFIiwgIlJYX1NVTU1fVFJFQVRNRU5UX1NUQVRVUyIsICJQVUZfMzBfREFZX01PUlRfQ0QiLCAiUFVGXzkwX0RBWV9NT1JUX0NEIiwKICAgICAgICAgICAgICAgICAgICJEWF9MQVNUQ09OVEFDVF9ERUFUSF9NT05USFMiLCAiUFVGX1ZJVEFMX1NUQVRVUyIsICJSWF9IT1NQX1NVUkdfUFJJTV9TSVRFIiwgIlJYX0hPU1BfQ0hFTU8iLAogICAgICAgICAgICAgICAgICAgIlJYX0hPU1BfSU1NVU5PVEhFUkFQWSIsICJSWF9IT1NQX0hPUk1PTkUiLCAiUlhfSE9TUF9PVEhFUiIsICJQVUZfTVVMVF9TT1VSQ0UiLCAiUkVGRVJFTkNFX0RBVEVfRkxBRyIsCiAgICAgICAgICAgICAgICAgICAiUlhfU1VNTV9TQ09QRV9SRUdfTE5fMjAxMiIsICJSWF9IT1NQX0RYU1RHX1BST0MiLCAiUEFMTElBVElWRV9DQVJFX0hPU1AiLCAiVFVNT1JfU0laRV9TVU1NQVJZIiwKICAgICAgICAgICAgICAgICAgICJNRVRTX0FUX0RYX09USEVSIiwgIk1FVFNfQVRfRFhfRElTVEFOVF9MTiIsICJNRVRTX0FUX0RYX0JPTkUiLCAiTUVUU19BVF9EWF9CUkFJTiIsCiAgICAgICAgICAgICAgICAgICAiTUVUU19BVF9EWF9MSVZFUiIsICJNRVRTX0FUX0RYX0xVTkciLCAiTk9fSFNEX1FVQVJfMTYiLCAiTUVEX0lOQ19RVUFSXzE2IiwgIk1FRElDQUlEX0VYUE5fQ09ERSIpCgoKCiNSZWFkIGluIGRhdGEgZm9yIGVhY2ggc3Vic2l0ZQpsaXAgPC0gcmVhZF9md2YoJ05DREJQVUZfTGlwLjMuMjAxNi4wLmRhdCcsIAogICAgICAgICAgICAgICAgICAgICAgIGZ3Zl93aWR0aHMoY29sLndpZHRoLCBjb2xfbmFtZXMgPSBjb2wubmFtZXMuYWJyKSwKICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZXMgPSBjb2xzKC5kZWZhdWx0ID0gY29sX2NoYXJhY3RlcigpKSkKCm1lbGFub21hIDwtIHJlYWRfZndmKCdOQ0RCUFVGX01lbGFub21hLjMuMjAxNi4wLmRhdCcsIAogICAgICAgICAgICAgICAgICAgICAgIGZ3Zl93aWR0aHMoY29sLndpZHRoLCBjb2xfbmFtZXMgPSBjb2wubmFtZXMuYWJyKSwKICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZXMgPSBjb2xzKC5kZWZhdWx0ID0gY29sX2NoYXJhY3RlcigpKSkKICAgICAgICAgICAgICAgICAgICAgICAKc2tpbiA8LSByZWFkX2Z3ZignTkNEQlBVRl9PdFNraW4uMy4yMDE2LjAuZGF0JywgCiAgICAgICAgICAgICAgICAgICAgICAgZndmX3dpZHRocyhjb2wud2lkdGgsIGNvbF9uYW1lcyA9IGNvbC5uYW1lcy5hYnIpLAogICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlcyA9IGNvbHMoLmRlZmF1bHQgPSBjb2xfY2hhcmFjdGVyKCkpKQoKaG9kZ2V4dHIgPC0gcmVhZF9md2YoJ05DREJQVUZfSG9kZ0V4dHIuMy4yMDE2LjAuZGF0JywgCiAgICAgICAgICAgICAgICAgICAgICAgZndmX3dpZHRocyhjb2wud2lkdGgsIGNvbF9uYW1lcyA9IGNvbC5uYW1lcy5hYnIpLAogICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlcyA9IGNvbHMoLmRlZmF1bHQgPSBjb2xfY2hhcmFjdGVyKCkpKQoKaG9kZ25kYWwgPC0gcmVhZF9md2YoJ05DREJQVUZfSG9kZ05kYWwuMy4yMDE2LjAuZGF0JywgCiAgICAgICAgICAgICAgICAgICAgICAgZndmX3dpZHRocyhjb2wud2lkdGgsIGNvbF9uYW1lcyA9IGNvbC5uYW1lcy5hYnIpLAogICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlcyA9IGNvbHMoLmRlZmF1bHQgPSBjb2xfY2hhcmFjdGVyKCkpKQoKTkhMbmRhbCA8LSByZWFkX2Z3ZignTkNEQlBVRl9OSExOZGFsLjMuMjAxNi4wLmRhdCcsIAogICAgICAgICAgICAgICAgICAgICAgIGZ3Zl93aWR0aHMoY29sLndpZHRoLCBjb2xfbmFtZXMgPSBjb2wubmFtZXMuYWJyKSwKICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZXMgPSBjb2xzKC5kZWZhdWx0ID0gY29sX2NoYXJhY3RlcigpKSkKCk5ITGV4dHIgPC0gcmVhZF9md2YoJ05DREJQVUZfTkhMRXh0ci4zLjIwMTYuMC5kYXQnLCAKICAgICAgICAgICAgICAgICAgICAgICBmd2Zfd2lkdGhzKGNvbC53aWR0aCwgY29sX25hbWVzID0gY29sLm5hbWVzLmFiciksCiAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGVzID0gY29scyguZGVmYXVsdCA9IGNvbF9jaGFyYWN0ZXIoKSkpCgoKYnJlYXN0IDwtICByZWFkX2Z3ZignTkNEQlBVRl9CcmVhc3QuMy4yMDE2LjAuZGF0JywgCiAgICAgICAgICAgICAgICAgICAgICAgZndmX3dpZHRocyhjb2wud2lkdGgsIGNvbF9uYW1lcyA9IGNvbC5uYW1lcy5hYnIpLAogICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlcyA9IGNvbHMoLmRlZmF1bHQgPSBjb2xfY2hhcmFjdGVyKCkpKQoKdnVsdmEgPC0gIHJlYWRfZndmKCdOQ0RCUFVGX1Z1bHZhLjMuMjAxNi4wLmRhdCcsIAogICAgICAgICAgICAgICAgICAgICAgIGZ3Zl93aWR0aHMoY29sLndpZHRoLCBjb2xfbmFtZXMgPSBjb2wubmFtZXMuYWJyKSwKICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZXMgPSBjb2xzKC5kZWZhdWx0ID0gY29sX2NoYXJhY3RlcigpKSkKCnZhZ2luYSA8LSAgcmVhZF9md2YoJ05DREJQVUZfVmFnaW5hLjMuMjAxNi4wLmRhdCcsIAogICAgICAgICAgICAgICAgICAgICAgIGZ3Zl93aWR0aHMoY29sLndpZHRoLCBjb2xfbmFtZXMgPSBjb2wubmFtZXMuYWJyKSwKICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZXMgPSBjb2xzKC5kZWZhdWx0ID0gY29sX2NoYXJhY3RlcigpKSkKCnBlbmlzIDwtICByZWFkX2Z3ZignTkNEQlBVRl9QZW5pcy4zLjIwMTYuMC5kYXQnLCAKICAgICAgICAgICAgICAgICAgICAgICBmd2Zfd2lkdGhzKGNvbC53aWR0aCwgY29sX25hbWVzID0gY29sLm5hbWVzLmFiciksCiAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGVzID0gY29scyguZGVmYXVsdCA9IGNvbF9jaGFyYWN0ZXIoKSkpCgpvdGxldWsgPC0gcmVhZF9md2YoJ05DREJQVUZfT3RMZXVrLjMuMjAxNi4wLmRhdCcsIAogICAgICAgICAgICAgICAgICAgICAgIGZ3Zl93aWR0aHMoY29sLndpZHRoLCBjb2xfbmFtZXMgPSBjb2wubmFtZXMuYWJyKSwKICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZXMgPSBjb2xzKC5kZWZhdWx0ID0gY29sX2NoYXJhY3RlcigpKSkKICAKb3RoZXJhY3V0ZWxldWsgIDwtIHJlYWRfZndmKCdOQ0RCUFVGX090QWNMZXVrLjMuMjAxNi4wLmRhdCcsIAogICAgICAgICAgICAgICAgICAgICAgIGZ3Zl93aWR0aHMoY29sLndpZHRoLCBjb2xfbmFtZXMgPSBjb2wubmFtZXMuYWJyKSwKICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZXMgPSBjb2xzKC5kZWZhdWx0ID0gY29sX2NoYXJhY3RlcigpKSkKICAKQUxMICA8LSByZWFkX2Z3ZignTkNEQlBVRl9BTHltTGV1ay4zLjIwMTYuMC5kYXQnLCAKICAgICAgICAgICAgICAgICAgICAgICBmd2Zfd2lkdGhzKGNvbC53aWR0aCwgY29sX25hbWVzID0gY29sLm5hbWVzLmFiciksCiAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGVzID0gY29scyguZGVmYXVsdCA9IGNvbF9jaGFyYWN0ZXIoKSkpCgoKI0NvbWJpbmUgZGF0YSBmb3IgYWxsIHN1YnNpdGVzCmRhdCA8LSBiaW5kX3Jvd3MobGlwLCBtZWxhbm9tYSwgc2tpbiwgaG9kZ2V4dHIsIGhvZGduZGFsLCBOSExuZGFsLCBicmVhc3QsIAogICAgICAgICAgICAgICAgIHZ1bHZhLCB2YWdpbmEsIHBlbmlzLCBOSExleHRyLCBvdGxldWssIG90aGVyYWN1dGVsZXVrLCBBTEwpCgpybShsaXAsIG1lbGFub21hLCBza2luLCBob2RnZXh0ciwgaG9kZ25kYWwsIE5ITG5kYWwsIGJyZWFzdCwgdnVsdmEsIHZhZ2luYSwgCiAgIHBlbmlzLCBOSExleHRyLCBvdGxldWssIG90aGVyYWN1dGVsZXVrLCBBTEwpCgpwcmltX3NpdGVfdGV4dCA8LSBkYXRhX2ZyYW1lKFBSSU1BUllfU0lURSA9IGMoCiNOSEwgc2l0ZXMKIkMwMDAiLCAKIkMwMDEiLCAKIkMwMDIiLCAKIkMwMDMiLCAKIkMwMDQiLCAKIkMwMDUiLCAKIkMwMDYiLCAKIkMwMDgiLAoiQzAwOSIsIAoiQzAxOSIsIAoiQzAyMCIsIAoiQzAyMSIsCiJDMDIyIiwgCiJDMDIzIiwgCiJDMDI0IiwgCiJDMDI4IiwgCiJDMDI5IiwKIkMwMzAiLAoiQzAzMSIsCiJDMDM5IiwgCiJDMDQwIiwgCiJDMDQxIiwgCiJDMDQ4IiwKIkMwNDkiLCAKIkMwNTAiLCAKIkMwNTEiLCAKIkMwNTIiLCAKIkMwNTgiLCAKIkMwNTkiLAoiQzA2MCIsIAoiQzA2MSIsIAoiQzA2MiIsIAoiQzA2OCIsIAoiQzA2OSIsIAoiQzA3OSIsICAKIkMwOTgiLAoiQzA5OSIsCiJDMTExIiwKIkMxNDIiLAoiQzMwMCIsCiJDMzc5IiwKIkM0MjAiLAoiQzQyMiIsCiJDNDI0IiwKCiNza2luL21lbGFub21hCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDNDQwIiwgIkM0NDEiLCAiQzQ0MiIsICJDNDQzIiwgIkM0NDQiLCAiQzQ0NSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDNDQ2IiwgIkM0NDciLCAiQzQ0OCIsICJDNDQ5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNicmVhc3QgLSBuaXBwbGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkM1MDAiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI3ZhZ2luYS92dWx2YQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQzUxMCIsICJDNTExIiwgIkM1MTIiLCAiQzUxOCIsICJDNTE5IiwgIkM1MjkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI3BlbmlzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDNjAwIiwgIkM2MDEiLCAiQzYwMiIsICJDNjA4IiwgIkM2MDkiLCAiQzYzOSIsCgoiQzc3MCIsCiJDNzcxIiwKIkM3NzIiLAoiQzc3MyIsCiJDNzc0IiwKIkM3NzUiLAoiQzc3OCIsCiJDNzc5IiksCgpTSVRFX1RFWFQgPSBjKAoiQzAwLjAgRXh0ZXJuYWwgTGlwOiBVcHBlciBOT1MiLAoiQzAwLjEgRXh0ZXJuYWwgTGlwOiBMb3dlciBOT1MiLAoiQzAwLjIgRXh0ZXJuYWwgTGlwOiBOT1MiLAoiQzAwLjMgTGlwOiBVcHBlciBNdWNvc2EiLAoiQzAwLjQgTGlwOiBMb3dlciBNdWNvc2EiLAoiQzAwLjUgTGlwOiBNdWNvc2EgTk9TIiwKIkMwMC42IExpcDogQ29tbWlzc3VyZSIsCiJDMDAuOCBMaXA6IE92ZXJsYXBwaW5nIiwKIkMwMC45IExpcCBOT1MiLAoiQzAxLjkgVG9uZ3VlOiBCYXNlIE5PUyIsCiJDMDIuMCBUb25ndWU6IERvcnNhbCBOT1MiLAoiQzAyLjEgVG9uZ3VlOiBCb3JkZXIsIFRpcCIsCiJDMDIuMiBUb25ndWU6IFZlbnRyYWwgTk9TIiwKIkMwMi4zIFRvbmd1ZTogQW50ZXJpb3IgTk9TIiwKIkMwMi40IExpbmd1YWwgVG9uc2lsIiwKIkMwMi44IFRvbmd1ZTogT3ZlcmxhcHBpbmciLAoiQzAyLjkgVG9uZ3VlOiBOT1MiLAoiQzAzLjAgR3VtOiBVcHBlciIsCiJDMDMuMSBHdW06IExvd2VyIiwKIkMwMy45IEd1bSBOT1MiLAoiQzA0LjAgTW91dGg6IEFudGVyaW9yIEZsb29yIiwKIkMwNC4xIE1vdXRoOiBMYXRlcmFsIEZsb29yIiwKIkMwNC44IE1vdXRoOiBPdmVybGFwcGluZyBGbG9vciIsCiJDMDQuOSBGbG9vciBvZiBNb3V0aCBOT1MiLAoiQzA1LjAgSGFyZCBQYWxhdGUiLAoiQzA1LjEgU29mdCBQYWxhdGUgTk9TIiwKIkMwNS4yIFV2dWxhIiwKIkMwNS44IFBhbGF0ZTogT3ZlcmxhcHBpbmciLAoiQzA1LjkgUGFsYXRlIE5PUyIsCiJDMDYuMCBDaGVlayBNdWNvc2EiLAoiQzA2LjEgTW91dGg6IFZlc3RpYnVsZSIsCiJDMDYuMiBSZXRyb21vbGFyIEFyZWEiLAoiQzA2LjggTW91dGg6IE90aGVyIE92ZXJsYXBwaW5nIiwKIkMwNi45IE1vdXRoIE5PUyIsCiJDMDcuOSBQYXJvdGlkIEdsYW5kIiwKICAiQzA5LjggVG9uc2lsOiBPdmVybGFwcGluZyIsCiAgIkMwOS45IFRvbnNpbCBOT1MiLAogICJDMTEuMSBOYXNvcGhhcnlueDogUG9zdGVyIFdhbGwiLCAKICAiQzE0LjIgV2FsZGV5ZXIgUmluZyIsCiAgIkMzMC4wIE5hc2FsIENhdml0eSIsCiAgIkMzNy45IFRoeW11cyIsCiJDNDIuMCBCbG9vZCIsCiAgIkM0Mi4yIFNwbGVlbiIsCiJDNDIuNCBIZW1hdG9wb2lldGljIE5PUyIsCgogI3NraW4KIkM0NC4wIFNraW4gb2YgbGlwLCBOT1MiLAoiQzQ0LjEgRXllbGlkIiwKIkM0NC4yIEV4dGVybmFsIGVhciIsCiJDNDQuMyBTa2luIG9mIGVhciBhbmQgdW5zcGVjaWZpZWQgcGFydHMgb2YgZmFjZSIsCiJDNDQuNCBTa2luIG9mIHNjYWxwIGFuZCBuZWNrIiwKIkM0NC41IFNraW4gb2YgdHJ1bmsiLAoiQzQ0LjYgU2tpbiBvZiB1cHBlciBsaW1iIGFuZCBzaG91bGRlciIsCiJDNDQuNyBTa2luIG9mIGxvd2VyIGxpbWIgYW5kIGhpcCIsCiJDNDQuOCBPdmVybGFwcGluZyBsZXNpb24gb2Ygc2tpbiIsCiJDNDQuOSBTa2luLCBOT1MiLCAKCiNicmVhc3QKIkM1MC4wIE5pcHBsZSIsCgojdnVsdmEvdmFnaW5hCiJDNTEuMCBMYWJpdW0gbWFqdXMiLAoiQzUxLjEgTGFiaXVtIG1pbnVzIiwKIkM1MS4yIENsaXRvcmlzIiwKIkM1MS44IE92ZXJsYXBwaW5nIGxlc2lvbiBvZiB2dWx2YSIsCiJDNTEuOSBWdWx2YSwgTk9TIiwKIkM1Mi45IFZhZ2luYSwgTk9TIiwKCiNwZW5pcwoiQzYwLjAgUHJlcHVjZSIsCiJDNjAuMSBHbGFucyBwZW5pcyIsCiJDNjAuMiBCb2R5IG9mIHBlbmlzIiwKIkM2MC44IE92ZXJsYXBwaW5nIGxlc2lvbiBvZiBwZW5pcyIsCiJDNjAuOSBQZW5pcyIsCiJDNjMuMiBTY3JvdHVtLCBOT1MiLAoKICAiQzc3LjAgTHltcGggTm9kZXM6IEhlYWRGYWNlTmVjayIsCiAgIkM3Ny4xIEludHJhdGhvcmFjaWMgTHltcGggTm9kZXMiLAogICJDNzcuMiBJbnRyYS1hYmRvbWluYWwgTHltcGhOb2RlcyIsCiAgIkM3Ny4zIEx5bXBoIE5vZGVzIG9mIGF4aWxsYSBvciBhcm0gIiwKICAiQzc3LjQgTHltcGggTm9kZXM6IExlZyIsCiAgIkM3Ny41IFBlbHZpYyBMeW1waCBOb2RlcyIsCiAgIkM3Ny44IEx5bXBoIE5vZGVzOiBtdWx0aXBsZSByZWdpb24iLAogICJDNzcuOSBMeW1waCBOb2RlIE5PUyIpKQoKCmRhdCA8LSBtZXJnZShkYXQsIHByaW1fc2l0ZV90ZXh0LCBieSA9ICJQUklNQVJZX1NJVEUiLCBhbGwueCA9IFRSVUUpIAoKcm0ocHJpbV9zaXRlX3RleHQpCgojIGNvbnZlcnQgbnVtZXJpYyB2YXJpYWJsZXMgZnJvbSBjaGFyYWN0ZXIgY2xhc3MgdG8gbnVtZXJpYyBjbGFzcwpudW1fdmFycyA8LSBjKCJBR0UiLCAiQ1JPV0ZMWSIsICJUVU1PUl9TSVpFIiwgIkRYX1NUQUdJTkdfUFJPQ19EQVlTIiwgIkRYX1JYX1NUQVJURURfREFZUyIsICJEWF9TVVJHX1NUQVJURURfREFZUyIsCiAgICAgICAgICAgICAgIkRYX0RFRlNVUkdfU1RBUlRFRF9EQVlTIiwgIlNVUkdfRElTQ0hBUkdFX0RBWVMiLCAiRFhfUkFEX1NUQVJURURfREFZUyIsICAiUkFEX1JFR0lPTkFMX0RPU0VfQ0dZIiwKICAgICAgICAgICAgICAiUkFEX0JPT1NUX0RPU0VfQ0dZIiwgIlJBRF9FTEFQU0VEX1JYX0RBWVMiLCAiRFhfU1lTVEVNSUNfU1RBUlRFRF9EQVlTIiwgIkRYX0NIRU1PX1NUQVJURURfREFZUyIsIAogICAgICAgICAgICAgICJEWF9IT1JNT05FX1NUQVJURURfREFZUyIsICJEWF9PVEhFUl9TVEFSVEVEX0RBWVMiLCAiRFhfTEFTVENPTlRBQ1RfREVBVEhfTU9OVEhTIiwKICAgICAgICAgICAgICAiUkFEX05VTV9UUkVBVF9WT0wiKQoKZGF0W251bV92YXJzXSA8LSBsYXBwbHkoZGF0W251bV92YXJzXSwgYXMubnVtZXJpYykKCgojIGNvbnZlcnQgZmFjdG9yIHZhcmlhYmxlcyBmcm9tIGNoYXJhY3RlciBjbGFzcyB0byBmYWN0b3IgY2xhc3MKdmFycyA8LSBuYW1lcyhkYXQpCmZhY3RfdmFycyA8LSB2YXJzWyEodmFycyAlaW4lIG51bV92YXJzKV0gIyBiYXNpY2FsbHkgYWxsIG9mIHRoZSBub24tbnVtZXJpY3MKCmRhdFtmYWN0X3ZhcnNdIDwtIGxhcHBseShkYXRbZmFjdF92YXJzXSwgYXMuY2hhcmFjdGVyKQpkYXRbZmFjdF92YXJzXSA8LSBsYXBwbHkoZGF0W2ZhY3RfdmFyc10sIGFzLmZhY3RvcikKCmRhdCA8LSBkYXQgJT4lCiAgICAgICAgbXV0YXRlKEZBQ0lMSVRZX1RZUEVfRiA9IGZjdF9yZWNvZGUoRkFDSUxJVFlfVFlQRV9DRCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQ29tbXVuaXR5IENhbmNlciBQcm9ncmFtIiA9ICIxIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQ29tcHJlaGVuc2l2ZSBDb21tIENhIFByb2dyYW0iID0gIjIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJBY2FkZW1pYy9SZXNlYXJjaCBQcm9ncmFtIiA9ICIzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSW50ZWdyYXRlZCBOZXR3b3JrIENhIFByb2dyYW0iID0gIjQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJPdGhlciIgPSAiOSIpKSAlPiUKICAgICAgICBtdXRhdGUoRkFDSUxJVFlfTE9DQVRJT05fRiA9IGZjdF9yZWNvZGUoRkFDSUxJVFlfTE9DQVRJT05fQ0QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk5ldyBFbmdsYW5kIiA9ICIxIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTWlkZGxlIEF0bGFudGljIiA9ICIyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU291dGggQXRsYW50aWMiID0gIjMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJFYXN0IE5vcnRoIENlbnRyYWwiID0gIjQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJFYXN0IFNvdXRoIENlbnRyYWwiID0gIjUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJXZXN0IE5vcnRoIENlbnRyYWwiID0gIjYiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJXZXN0IFNvdXRoIENlbnRyYWwiID0gIjciLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJNb3VudGFpbiIgPSAiOCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlBhY2lmaWMiID0gIjkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvdXQgb2YgVVMiID0gIjAiKSkgJT4lCiAgICAgICAgbXV0YXRlKEZBQ0lMSVRZX0dFT0dSQVBIWSA9IGZjdF9jb2xsYXBzZShGQUNJTElUWV9MT0NBVElPTl9DRCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJOb3J0aGVhc3QiID0gYygiMSIsICIyIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU291dGgiID0gYygiMyIsICI3IiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTWlkd2VzdCIgPSBjKCI0IiwgIjUiLCAiNiIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIldlc3QiID0gYygiOCIsICI5IikpKSAlPiUKICAgICAgICBtdXRhdGUoQUdFX0YgPSBjdXQoQUdFLCBjKDAsIDU0LCA2NCwgNzQsIDEwMCkpKSAlPiUKICAgICAgICBtdXRhdGUoQUdFXzQwID0gY3V0KEFHRSwgYygwLCA0MCwgMTAwKSkpICU+JQogICAgICAgIG11dGF0ZShTRVhfRiA9IGZjdF9yZWNvZGUoU0VYLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJNYWxlIiA9ICIxIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRmVtYWxlIiA9ICIyIikpICU+JQogICAgICAgIG11dGF0ZShSQUNFX0YgPSBmY3RfY29sbGFwc2UoUkFDRSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiV2hpdGUiID0gYygiMDEiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQmxhY2siID0gYygiMDIiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQXNpYW4iID0gYygiMDQiLCAiMDUiLCAiMDYiLCAiMDciLCAiMDgiLCAiMTAiLCAiMTEiLCAiMTIiLCAiMTMiLCAiMTQiLCAiMTUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIxNiIsICIxNyIsICIyMCIsICIyMSIsICIyMiIsICIyNSIsICIyNiIsICIyNyIsICIyOCIsICIzMCIsICIzMSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjMyIiwgIjk2IiwgIjk3IiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk90aGVyL1VuayIgPSBjKCIwMyIsICI5OCIsICI5OSIpKSkgJT4lCiAgICAgICAgbXV0YXRlKEhJU1BBTklDID0gZmN0X2NvbGxhcHNlKFNQQU5JU0hfSElTUEFOSUNfT1JJR0lOLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiWWVzIiA9IGMoIjEiLCAiMiIsICIzIiwgIjQiLCAiNSIsICI2IiwgIjciLCAiOCIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTm8iID0gYygiMCIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVW5rbm93biIgPSBjKCI5IikpKSAlPiUKICAgICAgICBtdXRhdGUoSU5TVVJBTkNFX0YgPSBmY3RfcmVjb2RlKElOU1VSQU5DRV9TVEFUVVMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk5vbmUiID0gIjAiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQcml2YXRlIiA9ICIxIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTWVkaWNhaWQiID0gIjIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJNZWRpY2FyZSIgPSAiMyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk90aGVyIEdvdmVybm1lbnQiID0gIjQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJVbmtub3duIiA9ICI5IikpICU+JQogICAgICAgIG11dGF0ZShJTlNVUkFOQ0VfRiA9IGZjdF9yZWxldmVsKElOU1VSQU5DRV9GLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQcml2YXRlIikpICU+JQogICAgICAgIG11dGF0ZShJTkNPTUVfRiA9IGZjdF9yZWNvZGUoTUVEX0lOQ19RVUFSXzEyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJMZXNzIHRoYW4gJDM4LDAwMCIgPSAiMSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiQzOCwwMDAgLSAkNDcsOTk5IiA9ICIyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJDQ4LDAwMCAtICQ2Miw5OTkiID0gIjMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIkNjMsMDAwICsiID0gIjQiKSkgJT4lCiAgICAgICAgbXV0YXRlKEVEVUNBVElPTl9GID0gZmN0X3JlY29kZShOT19IU0RfUVVBUl8xMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMSUgb3IgbW9yZSIgPSAiMSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMTMgLSAyMC45JSIgPSAiMiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiNyAtIDEyLjklIiA9ICIzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJMZXNzIHRoYW4gNyUiID0gIjQiKSkgJT4lCiAgICAgICAgbXV0YXRlKFVfUl9GID0gZmN0X2NvbGxhcHNlKFVSX0NEXzEzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTWV0cm8iID0gYygiMSIsICIyIiwgIjMiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlVyYmFuIiA9IGMoIjQiLCAiNSIsICI2IiwgIjciKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlJ1cmFsIiA9IGMoIjgiLCAiOSIpKSkgJT4lCiAgICAgICAgbXV0YXRlKENMQVNTX09GX0NBU0VfRiA9IGZjdF9jb2xsYXBzZShDTEFTU19PRl9DQVNFLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWxsX1BhcnRfUHJpbSA9IGMoIjEwIiwgIjExIiwgIjEyIiwgIjEzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIxNCIsICIyMCIsICIyMSIsICIyMiIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3RoZXJfRmFjaWxpdHkgPSBjKCIwMCIpKSkgJT4lCiAgICAgICAgbXV0YXRlKEdSQURFX0YgPSBmY3RfcmVjb2RlKEdSQURFLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkdyIEk6IFdlbGwgRGlmZiIgPSAiMSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiR3IgSUk6IE1vZCBEaWZmIiA9ICIyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJHciBJSUk6IFBvb3IgRGlmZiIgPSAiMyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiR3IgSVY6IFVuZGlmZi9BbmFwbGFzdGljIiA9ICI0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJOQS9Vbmtvd24iID0gIjkiKSkgJT4lCiAgICAgICAgbXV0YXRlKEhJU1RPTE9HWV9GID0gZmN0X2luZnJlcShISVNUT0xPR1kpKSAlPiUKICAgICAgICBtdXRhdGUoSElTVE9MT0dZX0YgPSBmYWN0b3IoSElTVE9MT0dZX0YpKSAlPiUKICAgICAgICBtdXRhdGUoSElTVE9MT0dZX0ZfTElNID0gZmN0X2x1bXAoSElTVE9MT0dZX0YsIHByb3AgPSAwLjA1KSkgJT4lCiAgICAgICAgbXV0YXRlKFROTV9DTElOX1QgPSBmY3RfcmVjb2RlKFROTV9DTElOX1QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJOX0EiID0gIjg4IikpICU+JQogICAgICAgIG11dGF0ZShUTk1fQ0xJTl9UID0gZmN0X3JlbGV2ZWwoVE5NX0NMSU5fVCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIxIikpICU+JQogICAgICAgIG11dGF0ZShUTk1fQ0xJTl9OID0gZmN0X3JlY29kZShUTk1fQ0xJTl9OLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTl9BIiA9ICI4OCIpKSAlPiUKICAgICAgICBtdXRhdGUoVE5NX0NMSU5fTSA9IGZjdF9yZWNvZGUoVE5NX0NMSU5fTSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk5fQSIgPSAiODgiKSkgJT4lCiAgICAgICAgbXV0YXRlKFROTV9QQVRIX1QgPSBmY3RfcmVjb2RlKFROTV9QQVRIX1QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJOX0EiID0gIjg4IikpICU+JQogICAgICAgIG11dGF0ZShUTk1fUEFUSF9UID0gZmN0X3JlbGV2ZWwoVE5NX1BBVEhfVCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIxIikpICU+JQogICAgICAgIG11dGF0ZShUTk1fUEFUSF9OID0gZmN0X3JlY29kZShUTk1fUEFUSF9OLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTl9BIiA9ICI4OCIpKSAlPiUKICAgICAgICBtdXRhdGUoVE5NX1BBVEhfTSA9IGZjdF9yZWNvZGUoVE5NX1BBVEhfTSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk5fQSIgPSAiODgiKSkgJT4lCiAgICAgICAgbXV0YXRlKFROTV9DTElOX1NUQUdFX0dST1VQID0gZmN0X3JlY29kZShUTk1fQ0xJTl9TVEFHRV9HUk9VUCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk5fQSIgPSAiODgiKSkgJT4lCiAgICAgICAgbXV0YXRlKFROTV9QQVRIX1NUQUdFX0dST1VQID0gZmN0X3JlY29kZShUTk1fUEFUSF9TVEFHRV9HUk9VUCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk5fQSIgPSAiODgiKSkgJT4lCiAgICAgICAgbXV0YXRlKE1BUkdJTlMgPSBmY3RfcmVjb2RlKFJYX1NVTU1fU1VSR0lDQUxfTUFSR0lOUywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk5vIFJlc2lkdWFsIiA9ICIwIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlJlc2lkdWFsLCBOT1MiID0gIjEiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTWljcm9zY29waWMgUmVzaWQiID0gIjIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTWFjcm9zY29waWMgUmVzaWQiID0gIjMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTm90IGV2YWx1YWJsZSIgPSAiNyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJObyBzdXJnIiA9ICI4IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlVua25vd24iID0gIjkiKSkgJT4lCiAgICAgICAgbXV0YXRlKE1BUkdJTlNfWU4gPSBmY3RfY29sbGFwc2UoUlhfU1VNTV9TVVJHSUNBTF9NQVJHSU5TLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJZZXMiID0gYygiMSIsICIyIiwgIjMiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTm8iID0gYygiMCIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJObyBzdXJnL1Vuay9OQSIgPSBjKCI3IiwgIjgiLCAiOSIpKSkgJT4lCiAgICAgICAgbXV0YXRlKFJFQURNX0hPU1BfMzBfREFZU19GID0gZmN0X3JlY29kZShSRUFETV9IT1NQXzMwX0RBWVMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTm9fU3VyZ19vcl9Ob19SZWFkbWl0IiA9ICIwIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJVbnBsYW5fUmVhZG1pdF9TYW1lIiA9ICIxIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQbGFuX1JlYWRtaXRfU2FtZSIgPSAiMiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUGxhblVucGxhbl9TYW1lIiA9ICIzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJVbmtub3duIiA9ICI0IikpICU+JQogICAgICAgIG11dGF0ZShSWF9TVU1NX1JBRElBVElPTl9GID0gZmN0X3JlY29kZShSWF9TVU1NX1JBRElBVElPTiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk5vbmUiID0gIjAiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQmVhbSBSYWRpYXRpb24iID0gIjEiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUmFkaW9hY3RpdmUgSW1wbGFudHMiID0gIjIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUmFkaW9pc290b3BlcyIgPSAiMyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJCZWFtICsgSW1wIG9yIElzb3RvcGVzIiA9ICI0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlJhZGlhdGlvbiwgTk9TIiA9ICI1IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlVua25vd24iID0gIjkiKSkgJT4lCiAgICAgICAgbXV0YXRlKFBVRl8zMF9EQVlfTU9SVF9DRF9GID0gZmN0X3JlY29kZShQVUZfMzBfREFZX01PUlRfQ0QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQWxpdmVfMzAiID0gIjAiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkRlYWRfMzAiID0gIjEiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlVua25vd24iID0gIjkiKSkgJT4lCiAgICAgICAgbXV0YXRlKFBVRl85MF9EQVlfTU9SVF9DRF9GID0gZmN0X3JlY29kZShQVUZfOTBfREFZX01PUlRfQ0QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQWxpdmVfOTAiID0gIjAiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkRlYWRfOTAiID0gIjEiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlVua25vd24iID0gIjkiKSkgJT4lCiAgICAgICAgbXV0YXRlKExZTVBIX1ZBU0NVTEFSX0lOVkFTSU9OX0YgPSBmY3RfcmVjb2RlKExZTVBIX1ZBU0NVTEFSX0lOVkFTSU9OLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTmVnX0x5bXBoVmFzY19JbnYiID0gIjAiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUG9zX0x1bXBoVmFzY19JbnYiID0gIjEiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTl9BIiA9ICI4IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlVua25vd24iID0gIjkiKSkgJT4lCiAgICAgICAgbXV0YXRlKFJYX0hPU1BfU1VSR19BUFBSXzIwMTBfRiA9IGZjdF9yZWNvZGUoUlhfSE9TUF9TVVJHX0FQUFJfMjAxMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTm9fU3VyZyIgPSAiMCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlJvYm90X0Fzc2lzdCIgPSAiMSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlJvYm90X3RvX09wZW4iID0gIjIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJFbmRvX0xhcCIgPSAiMyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkVuZG9fTGFwX3RvX09wZW4iID0gIjQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJPcGVuX1Vua25vd24iID0gIjUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJVbmtub3duIiA9ICI5IikpICU+JQogICAgICAgIG11dGF0ZShBbGwgPSAiQWxsIikgJT4lCiAgICAgICAgbXV0YXRlKEFsbCA9IGZhY3RvcihBbGwpKSAlPiUKICAgICAgICBtdXRhdGUoUkVBU09OX0ZPUl9OT19TVVJHRVJZX0YgPSBmY3RfcmVjb2RlKFJFQVNPTl9GT1JfTk9fU1VSR0VSWSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTdXJnIHBlcmZvcm1lZCIgPSAiMCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU3VyZyBub3QgcmVjb21tZW5kZWQiID0gIjEiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk5vIHN1cmcgZHVlIHRvIHB0IGZhY3RvcnMiID0gIjIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk5vIHN1cmcsIHB0IGRpZWQiID0gIjUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlN1cmcgcmVjLCBub3QgZG9uZSIgPSAiNiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU3VyZyByZWMsIHB0IHJlZnVzZWQiID0gIjciLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlN1cmcgcmVjLCB1bmsgaWYgZG9uZSIgPSAiOCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVW5rbm93biIgPSAiOSIpKSAlPiUKICAgICAgICBtdXRhdGUoU1VSR0VSWV9ZTiA9IGlmZWxzZShSRUFTT05fRk9SX05PX1NVUkdFUlkgPT0gIjAiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJZZXMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmZWxzZShSRUFTT05fRk9SX05PX1NVUkdFUlkgPT0gIjkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVWtuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk5vIikpKSAlPiUKICAgICAgICBtdXRhdGUoU1VSR19URiA9IGNhc2Vfd2hlbihTVVJHRVJZX1lOID09ICJZZXMiIH4gVFJVRSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTVVJHRVJZX1lOID09ICJObyIgfiBGQUxTRSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUUlVFIH4gTkEpKSAgJT4lCiAgICAgICAgbXV0YXRlKFJFQVNPTl9GT1JfTk9fUkFESUFUSU9OX0YgPSBmY3RfcmVjb2RlKFJFQVNPTl9GT1JfTk9fUkFESUFUSU9OLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlJhZCBwZXJmb3JtZWQiID0gIjAiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlJhZCBub3QgcmVjb21tZW5kZWQiID0gIjEiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk5vIFJhZCBkdWUgdG8gcHQgZmFjdG9ycyIgPSAiMiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTm8gUmFkLCBwdCBkaWVkIiA9ICI1IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJSYWQgcmVjLCBub3QgZG9uZSIgPSAiNiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUmFkIHJlYywgcHQgcmVmdXNlZCIgPSAiNyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUmFkIHJlYywgdW5rIGlmIGRvbmUiID0gIjgiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlVua25vd24iID0gIjkiKSkgJT4lCiAgICAgICAgbXV0YXRlKFJBRElBVElPTl9ZTiA9IGlmZWxzZShSRUFTT05fRk9SX05PX1JBRElBVElPTiA9PSAiMCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlllcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZlbHNlKFJFQVNPTl9GT1JfTk9fUkFESUFUSU9OID09ICI5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJObyIpKSkgJT4lCiAgICAgICAgbXV0YXRlKFNVUkdSQURfU0VRX0YgPSBmY3RfcmVjb2RlKFJYX1NVTU1fU1VSR1JBRF9TRVEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJOb25lIG9yIFN1cmcgb3IgUmFkIiA9ICIwIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlJhZCBiZWZvcmUgU3VyZyIgPSAiMiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTdXJnIGJlZm9yZSBSYWQiID0gIjMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUmFkIGJlZm9yZSBhbmQgYWZ0ZXIgU3VyZyIgPSAiNCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbnRyYW9wIFJhZCIgPSAiNSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbnRyYW9wIFJhZCBwbHVzIG90aGVyIiA9ICI2IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlVua25vd24iID0gIjkiKSkgJT4lCiAgICAgICAgbXV0YXRlKFNVUkdfUkFEX1NFUSA9IGlmZWxzZShTVVJHRVJZX1lOID09ICJZZXMiICYgUlhfU1VNTV9TVVJHUkFEX1NFUSA9PSAiMCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU3VyZyBBbG9uZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZmVsc2UoUkFESUFUSU9OX1lOID09ICJZZXMiICYgUlhfU1VNTV9TVVJHUkFEX1NFUSA9PSAiMCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlJhZCBBbG9uZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZlbHNlKFNVUkdFUllfWU4gPT0gIk5vIiAmIFJBRElBVElPTl9ZTiA9PSAiTm8iICYgUlhfU1VNTV9TVVJHUkFEX1NFUSA9PSAiMCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJObyBUcmVhdG1lbnQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZmVsc2UoUlhfU1VNTV9TVVJHUkFEX1NFUSA9PSAiMiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUmFkIHRoZW4gU3VyZyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZmVsc2UoUlhfU1VNTV9TVVJHUkFEX1NFUSA9PSAiMyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlN1cmcgdGhlbiBSYWQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmZWxzZShSWF9TVU1NX1NVUkdSQURfU0VRID09ICI0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlJhZCBiZWZvcmUgYW5kIGFmdGVyIFN1cmciLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiT3RoZXIiKSkpKSkpKSAlPiUKICAgICAgICBtdXRhdGUoU1VSR19SQURfU0VRID0gZmN0X3JlbGV2ZWwoU1VSR19SQURfU0VRLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU3VyZyBBbG9uZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTdXJnIHRoZW4gUmFkIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlJhZCBBbG9uZSIpKSAlPiUKICAgICAgICBtdXRhdGUoQ0hFTU9fWU4gPSBmY3RfY29sbGFwc2UoUlhfU1VNTV9DSEVNTywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk5vIiA9IGMoIjAwIiwgIjgyIiwgIjg1IiwgIjg2IiwgIjg3IiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJZZXMiID0gYygiMDEiLCAiMDIiLCAiMDMiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlVrbiIgPSBjKCI4OCIsICI5OSIpKSkgJT4lCiAgICAgICAgbXV0YXRlKElNTVVOT19ZTiA9IGZjdF9jb2xsYXBzZShSWF9TVU1NX0lNTVVOT1RIRVJBUFksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJObyIgPSBjKCIwMCIsICI4MiIsICI4NSIsICI4NiIsICI4NyIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiWWVzIiA9IGMoIjAxIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJVa24iID0gYygiODgiLCAiOTkiKSkpICU+JQogICAgICAgIG11dGF0ZShTVVJHX1JBRF9TRVFfQyA9IGlmZWxzZShTVVJHRVJZX1lOID09ICJZZXMiICYgUlhfU1VNTV9TVVJHUkFEX1NFUSA9PSAiMCIgJiBDSEVNT19ZTiA9PSAiTm8iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlN1cmcsIE5vIHJhZCwgTm8gQ2hlbW8iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZlbHNlKFJBRElBVElPTl9ZTiA9PSAiWWVzIiAmIFJYX1NVTU1fU1VSR1JBRF9TRVEgPT0gIjAiICYgQ0hFTU9fWU4gPT0gIk5vIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUmFkLCBObyBTdXJnLCBObyBDaGVtbyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZlbHNlKFNVUkdFUllfWU4gPT0gIk5vIiAmIFJBRElBVElPTl9ZTiA9PSAiTm8iICYgUlhfU1VNTV9TVVJHUkFEX1NFUSA9PSAiMCIgJiBDSEVNT19ZTiA9PSAiTm8iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTm8gU3VyZywgTm8gUmFkLCBObyBDaGVtbyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmZWxzZShSWF9TVU1NX1NVUkdSQURfU0VRID09ICIyIiAmIENIRU1PX1lOID09ICJObyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUmFkIHRoZW4gU3VyZywgTm8gQ2hlbW8iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZlbHNlKFJYX1NVTU1fU1VSR1JBRF9TRVEgPT0gIjMiICYgQ0hFTU9fWU4gPT0gIk5vIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU3VyZyB0aGVuIFJhZCwgTm8gQ2hlbW8iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmZWxzZShSWF9TVU1NX1NVUkdSQURfU0VRID09ICI0IiAmIENIRU1PX1lOID09ICJObyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJSYWQgYmVmb3JlIGFuZCBhZnRlciBTdXJnLCBObyBDaGVtbyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZlbHNlKFNVUkdFUllfWU4gPT0gIlllcyIgJiBSWF9TVU1NX1NVUkdSQURfU0VRID09ICIwIiAmIENIRU1PX1lOID09ICJZZXMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU3VyZywgTm8gcmFkLCBZZXMgQ2hlbW8iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZmVsc2UoUkFESUFUSU9OX1lOID09ICJZZXMiICYgUlhfU1VNTV9TVVJHUkFEX1NFUSA9PSAiMCIgJiBDSEVNT19ZTiA9PSAiWWVzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJSYWQsIE5vIFN1cmcsIFllcyBDaGVtbyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZmVsc2UoU1VSR0VSWV9ZTiA9PSAiTm8iICYgUkFESUFUSU9OX1lOID09ICJObyIgJiBSWF9TVU1NX1NVUkdSQURfU0VRID09ICIwIiAmIENIRU1PX1lOID09ICJZZXMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJObyBTdXJnLCBObyBSYWQsIFllcyBDaGVtbyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZlbHNlKFJYX1NVTU1fU1VSR1JBRF9TRVEgPT0gIjIiICYgQ0hFTU9fWU4gPT0gIlllcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJSYWQgdGhlbiBTdXJnLCBZZXMgQ2hlbW8iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZmVsc2UoUlhfU1VNTV9TVVJHUkFEX1NFUSA9PSAiMyIgJiBDSEVNT19ZTiA9PSAiWWVzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTdXJnIHRoZW4gUmFkLCBZZXMgQ2hlbW8iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZlbHNlKFJYX1NVTU1fU1VSR1JBRF9TRVEgPT0gIjQiICYgQ0hFTU9fWU4gPT0gIlllcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlJhZCBiZWZvcmUgYW5kIGFmdGVyIFN1cmcsIFllcyBDaGVtbyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk90aGVyIikpKSkpKSkpKSkpKSkgJT4lCiAgICAgICAgbXV0YXRlKFNVUkdfUkFEX1NFUV9DID0gZmN0X2luZnJlcShTVVJHX1JBRF9TRVFfQykpICU+JQogICAgICAgIG11dGF0ZShUX1NJWkUgPSBhcy5udW1lcmljKFRVTU9SX1NJWkUpKSAlPiUKICAgICAgICBtdXRhdGUoVF9TSVpFID0gaWZlbHNlKFRfU0laRSA9PSAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJObyBUdW1vciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZlbHNlKFRfU0laRSA+IDAgJiBUX1NJWkUgPCAxMCB8IFRfU0laRSA9PSA5OTEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI8IDEgY20iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZmVsc2UoVF9TSVpFID49IDEwICYgVF9TSVpFIDwgMjAgfCBUX1NJWkUgPT0gOTkyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjEtMiBjbSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZmVsc2UoVF9TSVpFID49IDIwICYgVF9TSVpFIDwgMzAgfCBUX1NJWkUgPT0gOTkzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyLTMgY20iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmZWxzZShUX1NJWkUgPj0gMzAgJiBUX1NJWkUgPCA0MCB8IFRfU0laRSA9PSA5OTQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIzLTQgY20iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZmVsc2UoVF9TSVpFID49IDQwICYgVF9TSVpFIDwgNTAgfCBUX1NJWkUgPT0gOTk1LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjQtNSBjbSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZmVsc2UoVF9TSVpFID49IDUwICYgVF9TSVpFIDwgNjAgfCBUX1NJWkUgPT0gOTk2LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI1LTYgY20iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmZWxzZShUX1NJWkUgPj0gNjAgJiBUX1NJWkUgPD0gOTg3IHwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUX1NJWkUgPT0gOTgwIHwgVF9TSVpFID09IDk4OSB8CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVF9TSVpFID09IDk5NywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPjYgY20iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmZWxzZShUX1NJWkUgPT0gOTg4IHwgVF9TSVpFID09IDk5OSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk5BX3VuayIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJNaWNyb3Njb3BpYyBmb2N1cyIpKSkpKSkpKSkpICU+JQogICAgICAgIG11dGF0ZShUX1NJWkUgPSBmYWN0b3IoVF9TSVpFKSkgJT4lCiAgICAgICAgbXV0YXRlKFRfU0laRSA9IGZjdF9yZWxldmVsKFRfU0laRSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJObyBUdW1vciIsICJNaWNyb3Njb3BpYyBmb2N1cyIsICI8IDEgY20iLCAiMS0yIGNtIiwgIjItMyBjbSIsICIzLTQgY20iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiNC01IGNtIiwgIjUtNiBjbSIsICI+NiBjbSIsICJOQV91bmsiKSkgJT4lCiAgICAgICAgbXV0YXRlKG1ldHNfYXRfZHggPSBjYXNlX3doZW4oQ1NfTUVUU19EWF9MVU5HID09ICIxIiB+ICJMdW5nIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDU19NRVRTX0RYX0JPTkUgPT0gIjEiIH4gIkJvbmUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENTX01FVFNfRFhfQlJBSU4gPT0gIjEiIH4gIkJyYWluIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDU19NRVRTX0RYX0xJVkVSID09ICIxIiB+ICJMaXZlciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFJVRSB+ICJOb25lL090aGVyL1Vuay9OQSIpKSAlPiUKICAgICAgICBtdXRhdGUoTUVESUNBSURfRVhQTl9DT0RFID0gZmN0X3JlY29kZShNRURJQ0FJRF9FWFBOX0NPREUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk5vbi1FeHBhbnNpb24gU3RhdGUiID0gIjAiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJKYW4gMjAxNCBFeHBhbnNpb24gU3RhdGVzIiA9ICIxIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRWFybHkgRXhwYW5zaW9uIFN0YXRlcyAoMjAxMC0xMykiID0gIjIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJMYXRlIEV4cGFuc2lvbiBTdGF0ZXMgKD4gSmFuIDIwMTQpIiA9ICIzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU3VwcHJlc3NlZCBmb3IgQWdlcyAwIC0gMzkiID0gIjkiKSkgICU+JQogICAgICAgIG11dGF0ZShFWFBOX0dST1VQID0gIGNhc2Vfd2hlbihNRURJQ0FJRF9FWFBOX0NPREUgICVpbiUgYygiSmFuIDIwMTQgRXhwYW5zaW9uIFN0YXRlcyIpICYgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWUVBUl9PRl9ESUFHTk9TSVMgJWluJSBjKCIyMDE0IiwgIjIwMTUiKSB+ICJQb3N0LUV4cGFuc2lvbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNRURJQ0FJRF9FWFBOX0NPREUgICVpbiUgYygiSmFuIDIwMTQgRXhwYW5zaW9uIFN0YXRlcyIpICYgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWUVBUl9PRl9ESUFHTk9TSVMgJWluJSAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYygiMjAwNCIsICIyMDA1IiwgIjIwMDYiLCAiMjAwNyIsICIyMDA4IiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMDkiLCAiMjAxMCIsICIyMDExIiwgIjIwMTIiLCAiMjAxMyIpIH4gIlByZS1FeHBhbnNpb24iLAogICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUVESUNBSURfRVhQTl9DT0RFICAlaW4lIGMoIkVhcmx5IEV4cGFuc2lvbiBTdGF0ZXMgKDIwMTAtMTMpIikgJiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBZRUFSX09GX0RJQUdOT1NJUyAlaW4lIGMoIjIwMTAiLCAiMjAxMSIsICIyMDEyIiwgIjIwMTMiLCAiMjAxNCIsICIyMDE1IikgfiAiUG9zdC1FeHBhbnNpb24iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1FRElDQUlEX0VYUE5fQ09ERSAgJWluJSBjKCJFYXJseSBFeHBhbnNpb24gU3RhdGVzICgyMDEwLTEzKSIpICYgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWUVBUl9PRl9ESUFHTk9TSVMgJWluJSBjKCIyMDA0IiwgIjIwMDUiLCAiMjAwNiIsICIyMDA3IiwgIjIwMDgiLCAiMjAwOSIpIH4gIlByZS1FeHBhbnNpb24iLAoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUVESUNBSURfRVhQTl9DT0RFICVpbiUgYygiTm9uLUV4cGFuc2lvbiBTdGF0ZSIpIH4gIlByZS1FeHBhbnNpb24iLAoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUVESUNBSURfRVhQTl9DT0RFICVpbiUgYygiTGF0ZSBFeHBhbnNpb24gU3RhdGVzICg+IEphbiAyMDE0KSIpIH4gIlByZS1FeHBhbnNpb24iLAogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNRURJQ0FJRF9FWFBOX0NPREUgJWluJSBjKCJMYXRlIEV4cGFuc2lvbiBTdGF0ZXMgKD4gSmFuIDIwMTQpIikgJiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFlFQVJfT0ZfRElBR05PU0lTICVpbiUgYygiMjAxNCIsICIyMDE1IikgfiAiRXhjbHVkZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNRURJQ0FJRF9FWFBOX0NPREUgPT0gIlN1cHByZXNzZWQgZm9yIEFnZXMgMCAtIDM5IiB+ICJFeGNsdWRlIikpICU+JQogIAogIG11dGF0ZShwcmVfMjAxNCA9IFlFQVJfT0ZfRElBR05PU0lTICVpbiUgYygiMjAwNCIsICIyMDA1IiwgIjIwMDYiLCAiMjAwNyIsICIyMDA4IiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMDkiLCAiMjAxMCIsICIyMDExIiwgIjIwMTIiLCAiMjAxMyIpKSAlPiUKICAKICBtdXRhdGUobWV0c19hdF9keF9GID0gaWZlbHNlKG1ldHNfYXRfZHggPT0gIk5vbmUvT3RoZXIvVW5rL05BIiwgRkFMU0UsIFRSVUUpKSAlPiUgCiAgCiAgbXV0YXRlKFR4X1lOID0gaWZlbHNlKFNVUkdfUkFEX1NFUSA9PSAiTm8gVHJlYXRtZW50IiAmIENIRU1PX1lOID09ICJObyIgJiAKICAgICAgICAgICAgICAgICAgICAgICAgICBJTU1VTk9fWU4gPT0gIk5vIiwgRkFMU0UsIAogICAgICAgICAgICAgICAgICAgICAgICBpZmVsc2UoQ0hFTU9fWU4gPT0gIlVrbiIsIE5BLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRSVUUpKSkKCmZhY3RfdmFyc18yIDwtIGMoIkZBQ0lMSVRZX1RZUEVfRiIsICJGQUNJTElUWV9MT0NBVElPTl9GIiwgIkFHRV9GIiwgIlNFWF9GIiwgIlJBQ0VfRiIsCiAgICAgICAgICAgICAgICAgIkhJU1BBTklDIiwgIklOU1VSQU5DRV9GIiwgIklOQ09NRV9GIiwgIkVEVUNBVElPTl9GIiwgIlVfUl9GIiwKICAgICAgICAgICAgICAgICAiQ0RDQ19UT1RBTF9CRVNUIiwgIkNMQVNTX09GX0NBU0VfRiIsICJZRUFSX09GX0RJQUdOT1NJUyIsICJQUklNQVJZX1NJVEUiLCAiSElTVE9MT0dZIiwKICAgICAgICAgICAgICAgICAiQkVIQVZJT1IiLCAiR1JBREVfRiIsICJUTk1fQ0xJTl9UIiwgIlROTV9DTElOX04iLCAiVE5NX0NMSU5fTSIsCiAgICAgICAgICAgICAgICAgIlROTV9DTElOX1NUQUdFX0dST1VQIiwgIlROTV9QQVRIX1QiLCAiVE5NX1BBVEhfTiIsICJUTk1fUEFUSF9NIiwgIlROTV9QQVRIX1NUQUdFX0dST1VQIiwKICAgICAgICAgICAgICAgICAiTUFSR0lOUyIsICJSRUFETV9IT1NQXzMwX0RBWVNfRiIsICJSWF9TVU1NX1JBRElBVElPTl9GIiwgIlBVRl8zMF9EQVlfTU9SVF9DRF9GIiwKICAgICAgICAgICAgICAgICAiUFVGXzkwX0RBWV9NT1JUX0NEX0YiLCAiTFlNUEhfVkFTQ1VMQVJfSU5WQVNJT05fRiIsICJSWF9IT1NQX1NVUkdfQVBQUl8yMDEwX0YiLCAibWV0c19hdF9keCIpCgoKZGF0IDwtIGRhdCAlPiUKICAgICAgICBtdXRhdGVfYXQoZmFjdF92YXJzXzIsIGZ1bnMoZmFjdG9yKC4pKSkKCmBgYAoKCiMgRXh0cmFjdCBEYXRhIG9mIEludGVyZXN0CgpgYGB7cn0KCgojIE5vbi1Ib2Rna2luIEx5bXBob21hIFNpdGVzCnNpdGVfY29kZSA8LSBjKCAKI2FkZGl0aW9uYWwgc2l0ZXMKCiAjbGlwICAKICAiQzAwMCIsICJDMDAxIiwgIkMwMDIiLCAiQzAwMyIsICJDMDA0IiwgIkMwMDUiLCJDMDA2IiwgIkMwMDgiLCJDMDA5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKI3NraW4vbWVsYW5vbWEKICAiQzQ0MCIsICJDNDQxIiwgIkM0NDIiLCAiQzQ0MyIsICJDNDQ0IiwgIkM0NDUiLCAiQzQ0NiIsICJDNDQ3IiwgIkM0NDgiLCAiQzQ0OSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogI2JyZWFzdCAtIG5pcHBsZQogICJDNTAwIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiN2YWdpbmEvdnVsdmEKICAiQzUxMCIsICJDNTExIiwgIkM1MTIiLCAiQzUxOCIsICJDNTE5IiwgIkM1MjkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKI3BlbmlzCiAiQzYwMCIsICJDNjAxIiwgIkM2MDIiLCAiQzYwOCIsICJDNjA5IiwgIkM2MzkiKQoKI215Y29zaXMgZnVuZ29pZGVzLCBTZXphcnkgc3luZHJvbWUsIHN1YmN1dGFuZW91cyBwYW5uaWN1bGl0aXMtbGlrZSBULWNlbGwgbHltcGhvbWEsCiNjdXRhbmVvdXMgVC1jZWxsIGx5bXBob21hLCBOT1MsIHByaW1hcnkgY3V0YW5lb3VzIENEMzArVC1jZWxsIGx5bXBob21hLCAKI05LL1QtY2VsbCBseW1waG9tYSwgcHJpbWFyeSBjdXRhbmVvdXMgZ2FtbWEtZGVsdGEgVC1jZWxsIGx5bXBob21hLCAKI2FuZCBibGFzdGljIE5LIGNlbGwgbHltcGhvbWEsIHJlc3BlY3RpdmVseQoKIyI5NzAwIiA9IE15Y29zaXMgRnVuZ29pZGVzCiAgIyBwYWdldG9pZCByZXRpY3Vsb3NpcwoKIyI5NzAxIiA9IFNlemFyeSBTeW5kcm9tZQogICMgU2V6YXJ5IGRpc2Vhc2UKCiMiOTcwOCIgPSBTdWJjdXRhbmVvdXMgcGFubmljdWxpdGlzbGlrZSBULWNlbGwgbHltcGhvbWEKCiMiOTcwOSIgPSBDdXRhbmVvdXMgVC1jZWxsIGx5bXBob21hLCBOT1MgCiAgIyBDdXRhbmVvdXMgbHltcGhvbWEsIE5PUyAoQzQ0Ll8pOyBQcmltYXJ5IGN1dGFuZW91cyBDRDQtcG9zaXRpdmUgc21hbGwvbWVkaXVtCiAgIyBULWNlbGwgbHltcGhvbWE7IFByaW1hcnkgY3V0YW5lb3VzIENEOC1wb3NpdGl2ZSBhZ2dyZXNzaXZlCiAgIyBlcGlkZXJtb3Ryb3BpYyBjeXRvdG94aWMgVC1jZWxsIGx5bXBob21hCgojIjk3MTgiID0gUHJpbWFyeSBjdXRhbmVvdXMgQ0QzMCsgVC1jZWxsIGx5bXBob3Byb2xpZmVyYXRpdmUgZGlzb3JkZXIgCiAgIyBMeW1waG9tYXRvaWQgcGFwdWxvc2lzIChDNDQuXyksIFByaW1hcnkgY3V0YW5lb3VzIGFuYXBsYXN0aWMgbGFyZ2UgY2VsbCwKICAjIGx5bXBob21hIChDNDQuXyksIFByaW1hcnkgY3V0YW5lb3VzIENEMzArIGxhcmdlIFQtY2VsbCBseW1waG9tYSAoQzQ0Ll8pCgoKIyI5NzI2IiA9IFByaW1hcnkgY3V0YW5lb3VzIGdhbW1hLWRlbHRhIFQtY2VsbCBseW1waG9tYQoKaGlzdG9fY29kZSA8LSBjKCI5NzI2IikKCmJlaGF2aW9yX2NvZGUgPC0gYygiMyIpCgpkYXRhIDwtIGRhdCAlPiUKICAgICAgICBmaWx0ZXIoQkVIQVZJT1IgJWluJSBiZWhhdmlvcl9jb2RlKSAlPiUKICAgICAgICBmaWx0ZXIoUFJJTUFSWV9TSVRFICVpbiUgc2l0ZV9jb2RlKSAlPiUKICAgICAgICBmaWx0ZXIoSElTVE9MT0dZICVpbiUgaGlzdG9fY29kZSkgJT4lCiAgICAgICAgI2ZpbHRlcihBR0UgPj0gMTgpICU+JQogICAgICAgIGZpbHRlcihpcy5uYShQVUZfVklUQUxfU1RBVFVTKSA9PSBGQUxTRSkgJT4lCiAgICAgICAgZmlsdGVyKGlzLm5hKERYX0xBU1RDT05UQUNUX0RFQVRIX01PTlRIUykgPT0gRkFMU0UpICAlPiUKICAgICAgICBmaWx0ZXIoU0VRVUVOQ0VfTlVNQkVSID09ICIwMCIpIAoKI2ZpbGVfcGF0aCA8LSBjKCIvVXNlcnMvYmVhc3RhdGxpZmUvR29vZ2xlIERyaXZlL1Blbm4vUmVzZWFyY2gvQmFyYmllcmkvTkNEQiIpCiNzYXZlKGRhdGEsCiMgICAgICBmaWxlID0gcGFzdGUwKGZpbGVfcGF0aCwgIi9DVENMX2RhdGEuUmRhIikpCmBgYAoKYGBge3IgbG9hZERhdGF9CiNsb2FkKCJNRl9kYXRhLlJkYSIpCmBgYAoKCkRhdGEgaW5jbHVkaW5nIHNraW4gdHVtb3JzIHdhcyBvYnRhaW5lZCBmcm9tIHRoZSBOQ0JEIG9uIE9jdG9iZXIgNywgMjAxOS4gQ2FzZXMgdGhhdCB3ZXJlIGluY2x1ZGVkIGluIHRoaXMgYW5hbHlzaXMgd2VyZSB0aG9zZSB3aXRoOgoKMS4gU2l0ZSBjb2RlczogYHIgc2l0ZV9jb2RlYAoyLiBIaXN0b2xvZ3kgY29kZXM6IGByIGhpc3RvX2NvZGVgCjMuIEJlaGF2aW9yIGNvZGVzOiBgciBiZWhhdmlvcl9jb2RlYAoKClBhdGllbnRzIHdlcmUgZXhjbHVkZWQgaWYgdGhleSBkaWRuJ3QgaGF2ZSB2YWx1ZXMgZm9yIGVpdGhlciBmb2xsb3cgdXAgb3Igdml0YWwgc3RhdHVzLgoKUGF0aWVudHMgd2VyZSBleGNsdWRlZCBpZiB0aGV5IGhhZCBzdXJnZXJ5IHRvIGEgZGlzdGFudCBzaXRlIHVzaW5nIGBSWF9TVU1NX1NVUkdfT1RIX1JFR0RJU2AuIFRoaXMgd2FzIGRvbmUgdG8gYXZvaWQgY29uZm91bmRpbmcgb2YgZGlmZmVyZW50IHN1cmdpY2FsIHByb2NlZHVyZXMuIFdlIGFyZSBvbmx5IGludGVyZXN0ZWQgaW4gc3VyZ2VyeSBhdCB0aGUgcHJpbWFyeSBzaXRlLiBUaGVzZSBkaXN0YW50IHNpdGUgc3VyZ2VyaWVzIHdlcmUgYmVpbmcgY291bnRlZCBpbiB0aGUgc3VyZ2VyeS9yYWRpYXRpb24gc2VxdWVuY2UgYW5kIHRodXMgdG8gc2ltcGxpZnkgYW5hbHlzaXMgdGhleSB3ZXJlIHJlbW92ZWQuIAoKYGBge3J9CgpkYXRhICU+JQogICAgICAgIENyZWF0ZVRhYmxlT25lKGRhdGEgPSAuLAogICAgICAgICAgICAgICAgICAgICB2YXJzID0gYygiUlhfU1VNTV9TVVJHX09USF9SRUdESVMiKSwKICAgICAgICAgICAgICAgICAgICAgaW5jbHVkZU5BID0gVFJVRSkgJT4lCiAgICAgICAgcHJpbnQoLiwKICAgICAgICAgICAgICBzaG93QWxsTGV2ZWxzID0gVFJVRSkKCmRhdGEgPC0gZGF0YSAlPiUKICAgICAgICBmaWx0ZXIoUlhfU1VNTV9TVVJHX09USF9SRUdESVMgPT0gIjAiKSAKYGBgCgoKUmFjZSB3YXMgZ3JvdXBlZCBhcyB3aGl0ZSwgYmxhY2ssIGFzaWFuLCBvdGhlci91bmtub3duClN0YWdlIHdhcyBncm91cGVkIGludG8gMCwgSSwgSUksIElJSSwgSVYsIE5BX1Vua25vd24sIHN0YWdlIDAgd2FzIHJlbW92ZWQKV2hldGhlciBzdXJnZXJ5IHdhcyBwZXJmb3JtZWQgd2FzIGJhc2VkIG9uIHRoZSBgUkVBU09OX0ZPUl9OT19TVVJHRVJZYCB2YXJpYWJsZS4gVGhlIGBTVVJHRVJZX1lOYCB2YXJpYWJsZSB3YXMgY2xhc3NpZmllZCBhcyAnWWVzJywgJ05vJywgb3IgJ1Vua25vd24nLgoKCldoZXRoZXIgcmFkaWF0aW9uIHdhcyBwZXJmb3JtZWQgd2FzIGJhc2VkIG9uIHRoZSBgUkVBU09OX0ZPUl9OT19SQURJQVRJT05gIHZhcmlhYmxlLiBUaGUgYFJBRElBVElPTl9ZTmAgdmFyaWFibGUgd2FzIGNsYXNzaWZpZWQgYXMgJ1llcycsICdObycsIG9yICdVbmtub3duJy4KCgoKI1RhYmxlIG9mIHZhcmlhYmxlcyBmb3IgYWxsIGNhc2VzOgoKYGBge3J9CmRhdGEgPC0gZGF0YSAlPiUgZHJvcGxldmVscygpCgpwX3RhYmxlKGRhdGEsCiAgICAgICAgdmFycyA9IGMoIkZBQ0lMSVRZX1RZUEVfRiIsICJGQUNJTElUWV9MT0NBVElPTl9GIiwgIkZBQ0lMSVRZX0dFT0dSQVBIWSIsICAiQUdFIiwgIkFHRV9GIiwgIkFHRV80MCIsCiAgICAgICAgICAgICAgICAgIlNFWF9GIiwgIlJBQ0VfRiIsICJISVNQQU5JQyIsICJJTlNVUkFOQ0VfRiIsIAogICAgICAgICAgICAgICAgICJJTkNPTUVfRiIsICJFRFVDQVRJT05fRiIsICJVX1JfRiIsICJDUk9XRkxZIiwgIkNEQ0NfVE9UQUxfQkVTVCIsCiAgICAgICAgICAgICAgICAgIlNJVEVfVEVYVCIsICAiSElTVE9MT0dZIiwgIkJFSEFWSU9SIiwgIkdSQURFX0YiLCAKICAgICAgICAgICAgICAgICAiRFhfU1RBR0lOR19QUk9DX0RBWVMiLCAiVE5NX0NMSU5fVCIsICJUTk1fQ0xJTl9OIiwgIlROTV9DTElOX00iLAogICAgICAgICAgICAgICAgICJUTk1fQ0xJTl9TVEFHRV9HUk9VUCIsICJUTk1fUEFUSF9UIiwgIlROTV9QQVRIX04iLCAiVE5NX1BBVEhfTSIsCiAgICAgICAgICAgICAgICAgIlROTV9QQVRIX1NUQUdFX0dST1VQIiwgIkRYX1JYX1NUQVJURURfREFZUyIsICJEWF9TVVJHX1NUQVJURURfREFZUyIsCiAgICAgICAgICAgICAgICAgIkRYX0RFRlNVUkdfU1RBUlRFRF9EQVlTIiwgIk1BUkdJTlMiLCAiTUFSR0lOU19ZTiIsICJTVVJHX0RJU0NIQVJHRV9EQVlTIiwKICAgICAgICAgICAgICAgICAiUkVBRE1fSE9TUF8zMF9EQVlTX0YiLCAiUlhfU1VNTV9SQURJQVRJT05fRiIsICJQVUZfMzBfREFZX01PUlRfQ0RfRiIsCiAgICAgICAgICAgICAgICAgIlBVRl85MF9EQVlfTU9SVF9DRF9GIiwgIkRYX0xBU1RDT05UQUNUX0RFQVRIX01PTlRIUyIsIAogICAgICAgICAgICAgICAgICJMWU1QSF9WQVNDVUxBUl9JTlZBU0lPTl9GIiwgIlJYX0hPU1BfU1VSR19BUFBSXzIwMTBfRiIsICJTVVJHX1JBRF9TRVEiLAogICAgICAgICAgICAgICAgICJTVVJHX1JBRF9TRVFfQyIsICJTVVJHRVJZX1lOIiwgIlJBRElBVElPTl9ZTiIsICJDSEVNT19ZTiIsICJJTU1VTk9fWU4iLCAiVHhfWU4iLCAibWV0c19hdF9keCIsCiAgICAgICAgICAgICAgICAgIk1FRElDQUlEX0VYUE5fQ09ERSIsICJFWFBOX0dST1VQIiwgIllFQVJfT0ZfRElBR05PU0lTIikpCmBgYAoKCgpgYGB7cn0KCnByZUV4cE1lZGljYXJlICA8LSBucm93KGRhdGEgJT4lIGZpbHRlcihFWFBOX0dST1VQID09ICJQcmUtRXhwYW5zaW9uIiAmIElOU1VSQU5DRV9GID09ICJNZWRpY2FyZSIpKQpwb3N0RXhwTWVkaWNhcmUgPC0gbnJvdyhkYXRhICU+JSBmaWx0ZXIoRVhQTl9HUk9VUCA9PSAiUG9zdC1FeHBhbnNpb24iICYgSU5TVVJBTkNFX0YgPT0gIk1lZGljYXJlIikpCgojIHAgPSAwLjI1IHdoZW4gY29tcGFyaW5nIGNoYW5nZSBpbiBwcm9wb3J0aW9uIG9mIHBhdGllbnRzIHdpdGggTWVkaWNhcmUgYmVmb3JlIGFuZCBhZnRlciBBQ0EgZXhwYW5zaW9uCnByb3AudGVzdChjKHByZUV4cE1lZGljYXJlLCBwb3N0RXhwTWVkaWNhcmUpLCAKICAgICAgICAgIGMobnJvdyhkYXRhICU+JSBmaWx0ZXIoRVhQTl9HUk9VUCA9PSAiUHJlLUV4cGFuc2lvbiIpKSwgbnJvdyhkYXRhICU+JSBmaWx0ZXIoRVhQTl9HUk9VUCA9PSAiUG9zdC1FeHBhbnNpb24iKSkpKQoKcHJlRXhwTm9JbnN1cmFuY2UgPC0gbnJvdyhkYXRhICU+JSBmaWx0ZXIoRVhQTl9HUk9VUCA9PSAiUHJlLUV4cGFuc2lvbiIpICU+JSAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcihJTlNVUkFOQ0VfRiA9PSAiTm9uZSIpKQpwb3N0RXhwTm9JbnN1cmFuY2UgPC0gbnJvdyhkYXRhICU+JSBmaWx0ZXIoRVhQTl9HUk9VUCA9PSAiUG9zdC1FeHBhbnNpb24iKSAlPiUgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyKElOU1VSQU5DRV9GID09ICJOb25lIikpCgojIFNpZ25pZmljYW50IGRlY3JlYXNlIGluIHRoZSBvdmVyYWxsIHByb3BvcnRpb24gb2YgcGF0aWVudHMgd2l0aG91dCBpbnN1cmFuY2UgYWZ0ZXIgQUNBIGV4cGFuc2lvbiAKcHJvcC50ZXN0KGMocHJlRXhwTm9JbnN1cmFuY2UsIHBvc3RFeHBOb0luc3VyYW5jZSksIAogICAgICAgICAgYyhucm93KGRhdGEgJT4lIGZpbHRlcihFWFBOX0dST1VQID09ICJQcmUtRXhwYW5zaW9uIikpLCBucm93KGRhdGEgJT4lIGZpbHRlcihFWFBOX0dST1VQID09ICJQb3N0LUV4cGFuc2lvbiIpKSkpCgpwX3RhYmxlKG5vX0V4Y2x1ZGVzLCBzdHJhdGEgPSAiRVhQTl9HUk9VUCIsIHZhcnMgPSAiRFhfUlhfU1RBUlRFRF9EQVlTIikKCmRhdGEgPC0gZGF0YSAlPiUgbXV0YXRlKEluc3VyZWQgPSBJTlNVUkFOQ0VfRiAhPSAiVW5rbm93biIpCgpgYGAKCgoKCiNLYXBsYW4gTWVpZXIgQW5hbHlzaXMKCgojI0FsbAoKYGBge3J9CnVuaV92YXIodGVzdF92YXIgPSAiQWxsIiwgZGF0YV9pbXAgPSBkYXRhKQpgYGAKCiMjRmFjaWxpdHkgVHlwZQpgYGB7cn0KdW5pX3Zhcih0ZXN0X3ZhciA9ICJGQUNJTElUWV9UWVBFX0YiLCBkYXRhX2ltcCA9IGRhdGEpCmBgYAoKIyNGYWNpbGl0eSBMb2NhdGlvbgoKYGBge3J9CnVuaV92YXIodGVzdF92YXIgPSAiRkFDSUxJVFlfTE9DQVRJT05fRiIsIGRhdGFfaW1wID0gZGF0YSkKYGBgCgojI0ZhY2lsaXR5IEdlb2dyYXBoeQoKYGBge3J9CnVuaV92YXIodGVzdF92YXIgPSAiRkFDSUxJVFlfR0VPR1JBUEhZIiwgZGF0YV9pbXAgPSBkYXRhKQpgYGAKCiMjQWdlIEdyb3VwCgpgYGB7cn0KdW5pX3Zhcih0ZXN0X3ZhciA9ICJBR0VfRiIsIGRhdGFfaW1wID0gZGF0YSkKYGBgCgojI0FnZSBHcm91cApgYGB7cn0KdW5pX3Zhcih0ZXN0X3ZhciA9ICJBR0VfNDAiLCBkYXRhX2ltcCA9IGRhdGEpCmBgYAoKIyNHZW5kZXIKCmBgYHtyfQp1bmlfdmFyKHRlc3RfdmFyID0gIlNFWF9GIiwgZGF0YV9pbXAgPSBkYXRhKQpgYGAKCiMjUkFDRV9GCgpgYGB7cn0KdW5pX3Zhcih0ZXN0X3ZhciA9ICJSQUNFX0YiLCBkYXRhX2ltcCA9IGRhdGEpCmBgYAoKIyNIaXNwYW5pYwoKYGBge3J9CnVuaV92YXIodGVzdF92YXIgPSAiSElTUEFOSUMiLCBkYXRhX2ltcCA9IGRhdGEpCmBgYAoKIyNJbnN1cmFuY2UgU3RhdHVzCgpgYGB7cn0KdW5pX3Zhcih0ZXN0X3ZhciA9ICJJTlNVUkFOQ0VfRiIsIGRhdGFfaW1wID0gZGF0YSkKYGBgCgojI092ZXJhbGwgU3Vydml2YWwgcHJlL3Bvc3QtQUNBIGV4cGFuc2lvbgoKYGBge3J9CnVuaV92YXIodGVzdF92YXIgPSAiRVhQTl9HUk9VUCIsIGRhdGFfaW1wID0gbm9fRXhjbHVkZXMpCmBgYAoKCjwhLS0gIyNJbmNvbWUgLS0+Cgo8IS0tIGBgYHtyfSAtLT4KPCEtLSBjbGFzcyhkYXRhJElOQ09NRV9GKSAtLT4KPCEtLSB1bmlfdmFyKHRlc3RfdmFyID0gIklOQ09NRV9GIiwgZGF0YV9pbXAgPSBkYXRhKSAtLT4KPCEtLSBgYGAgLS0+CgojI0VkdWNhdGlvbgoKYGBge3J9CnVuaV92YXIodGVzdF92YXIgPSAiRURVQ0FUSU9OX0YiLCBkYXRhX2ltcCA9IGRhdGEpCmBgYAoKIyNVcmJhbi9SdXJhbAoKYGBge3J9CnVuaV92YXIodGVzdF92YXIgPSAiVV9SX0YiLCBkYXRhX2ltcCA9IGRhdGEpCmBgYAoKIyNDbGFzcyAodHJlYXRtZW50IGF0IHBlcmZvcm1pbmcgZmFjaWxpdHkpCgpgYGB7cn0KdW5pX3Zhcih0ZXN0X3ZhciA9ICJDTEFTU19PRl9DQVNFX0YiLCBkYXRhX2ltcCA9IGRhdGEpCmBgYAoKIyNZZWFyCgpgYGB7cn0KdW5pX3Zhcih0ZXN0X3ZhciA9ICJZRUFSX09GX0RJQUdOT1NJUyIsIGRhdGFfaW1wID0gZGF0YSkKYGBgCgojI1ByaW1hcnkgU2l0ZQoKYGBge3J9CnVuaV92YXIodGVzdF92YXIgPSAiU0lURV9URVhUIiwgZGF0YV9pbXAgPSBkYXRhKQpgYGAKCgojI0hpc3RvbG9neQoKYGBge3J9CiN1bmlfdmFyKHRlc3RfdmFyID0gIkhJU1RPTE9HWV9GX0xJTSIsIGRhdGFfaW1wID0gZGF0YSkKYGBgCgo8IS0tICMjQmVoYXZpb3IgLS0+Cgo8IS0tIGBgYHtyfSAtLT4KPCEtLSB1bmlfdmFyKHRlc3RfdmFyID0gIkJFSEFWSU9SIiwgZGF0YV9pbXAgPSBkYXRhKSAtLT4KPCEtLSBgYGAgLS0+CgojI0dyYWRlCgpgYGB7cn0KI3VuaV92YXIodGVzdF92YXIgPSAiR1JBREVfRiIsIGRhdGFfaW1wID0gZGF0YSkKYGBgCgojI0NsaW5pY2FsIFQgU3RhZ2UKCmBgYHtyfQp1bmlfdmFyKHRlc3RfdmFyID0gIlROTV9DTElOX1QiLCBkYXRhX2ltcCA9IGRhdGEpCmBgYAoKIyNDbGluaWNhbCBOIFN0YWdlCgpgYGB7cn0KdW5pX3Zhcih0ZXN0X3ZhciA9ICJUTk1fQ0xJTl9OIiwgZGF0YV9pbXAgPSBkYXRhKQpgYGAKCjwhLS0gIyNDbGluaWNhbCBNIFN0YWdlIC0tPgoKPCEtLSBgYGB7cn0gLS0+CjwhLS0gdW5pX3Zhcih0ZXN0X3ZhciA9ICJUTk1fQ0xJTl9NIiwgZGF0YV9pbXAgPSBkYXRhKSAtLT4KPCEtLSBgYGAgLS0+CgojI0NsaW5pY2FsIFN0YWdlIEdyb3VwCgpgYGB7cn0KdW5pX3Zhcih0ZXN0X3ZhciA9ICJUTk1fQ0xJTl9TVEFHRV9HUk9VUCIsIGRhdGFfaW1wID0gZGF0YSkKYGBgCgojI1BhdGhvbG9naWMgVCBTdGFnZQoKYGBge3J9CnVuaV92YXIodGVzdF92YXIgPSAiVE5NX1BBVEhfVCIsIGRhdGFfaW1wID0gZGF0YSkKYGBgCgojI1BhdGhvbG9naWMgTiBTdGFnZQoKYGBge3J9CnVuaV92YXIodGVzdF92YXIgPSAiVE5NX1BBVEhfTiIsIGRhdGFfaW1wID0gZGF0YSkKYGBgCgojI1BhdGhvbG9naWMgTSBTdGFnZQoKYGBge3J9CnVuaV92YXIodGVzdF92YXIgPSAiVE5NX1BBVEhfTSIsIGRhdGFfaW1wID0gZGF0YSkKYGBgCgojI1BhdGhvbG9naWMgU3RhZ2UgR3JvdXAKCmBgYHtyfQp1bmlfdmFyKHRlc3RfdmFyID0gIlROTV9QQVRIX1NUQUdFX0dST1VQIiwgZGF0YV9pbXAgPSBkYXRhKQpgYGAKCiMjTWFyZ2lucwpgYGB7cn0KI3VuaV92YXIodGVzdF92YXIgPSAiTUFSR0lOUyIsIGRhdGFfaW1wID0gZGF0YSkKYGBgCgojI01hcmdpbnMgWWVzL05vCmBgYHtyfQojdW5pX3Zhcih0ZXN0X3ZhciA9ICJNQVJHSU5TX1lOIiwgZGF0YV9pbXAgPSBkYXRhKQpgYGAKCiMjMzAgRGF5IFJlYWRtaXNzaW9uCgpgYGB7cn0KdW5pX3Zhcih0ZXN0X3ZhciA9ICJSRUFETV9IT1NQXzMwX0RBWVNfRiIsIGRhdGFfaW1wID0gZGF0YSkKYGBgCgojI1JhZGlhdGlvbiBUeXBlCgpgYGB7cn0KdW5pX3Zhcih0ZXN0X3ZhciA9ICJSWF9TVU1NX1JBRElBVElPTl9GIiwgZGF0YV9pbXAgPSBkYXRhKQpgYGAKCgojI0x5bXBob3Zhc2N1bGFyIEludmFzaW9uCgpgYGB7cn0KI3VuaV92YXIodGVzdF92YXIgPSAiTFlNUEhfVkFTQ1VMQVJfSU5WQVNJT05fRiIsIGRhdGFfaW1wID0gZGF0YSkKYGBgCgojI0VuZG9zY29waWMvUm9ib3RpYwoKYGBge3J9CnVuaV92YXIodGVzdF92YXIgPSAiUlhfSE9TUF9TVVJHX0FQUFJfMjAxMF9GIiwgZGF0YV9pbXAgPSBkYXRhKQpgYGAKCiMjU3VyZ2VyeSBSYWRpYXRpb24gU2VxdWVuY2UgCgpgYGB7cn0KdW5pX3Zhcih0ZXN0X3ZhciA9ICJTVVJHX1JBRF9TRVEiLCBkYXRhX2ltcCA9IGRhdGEpCmBgYAoKIyNTdXJnZXJ5IFllcy9ObwoKYGBge3J9CnVuaV92YXIodGVzdF92YXIgPSAiU1VSR0VSWV9ZTiIsIGRhdGFfaW1wID0gZGF0YSkKYGBgCgojI1JhZGlhdGlvbiBZZXMvTm8KCmBgYHtyfQp1bmlfdmFyKHRlc3RfdmFyID0gIlJBRElBVElPTl9ZTiIsIGRhdGFfaW1wID0gZGF0YSkKYGBgCgojI0NoZW1vIFllcy9ObwoKYGBge3J9CnVuaV92YXIodGVzdF92YXIgPSAiQ0hFTU9fWU4iLCBkYXRhX2ltcCA9IGRhdGEpCmBgYAoKCiMjVHJlYXRtZW50IFllcy9ObwpgYGB7cn0KdW5pX3Zhcih0ZXN0X3ZhciA9ICJUeF9ZTiIsIGRhdGFfaW1wID0gZGF0YSkKYGBgCgojI01ldGFzdGFzZXMgYXQgRHgKYGBge3J9CnVuaV92YXIodGVzdF92YXIgPSAibWV0c19hdF9keF9GIiwgZGF0YV9pbXAgPSBkYXRhKQpgYGAKCjwhLS0gIyNUdW1vciBTaXplIC0tPgoKPCEtLSBgYGB7cn0gLS0+CjwhLS0gdW5pX3Zhcih0ZXN0X3ZhciA9ICJUX1NJWkUiLCBkYXRhX2ltcCA9IGRhdGEpIC0tPgo8IS0tIGBgYCAtLT4KCiNUdW1vciBzcGVjaWZpYyBWYXJpYWJsZXMKCgojIyNOb2RlIFNpemUKCgojQ294IFByb3BvcnRpb25hbCBIYXphcmQgUmF0aW8KCiMjTW9kZWwgIzEKCiMjI0Z1bGwgYW5hbHlzaXMKCmBgYHtyfQptb2RlbF9vbmUgPC0gY294cGgoU3VydihEWF9MQVNUQ09OVEFDVF9ERUFUSF9NT05USFMsIFBVRl9WSVRBTF9TVEFUVVMgPT0gMCkKICAgICAgICAgICAgICAgICAgICAgfiBTVVJHX1JBRF9TRVEgKyBJTlNVUkFOQ0VfRiArIEFHRSArIFNFWF9GICsgUkFDRV9GICsgSU5DT01FX0YgKyBVX1JfRiArCiAgICAgICAgICAgICAgICAgICAgICBGQUNJTElUWV9UWVBFX0YgKyBGQUNJTElUWV9MT0NBVElPTl9GICsgRURVQ0FUSU9OX0YsCiAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBkYXRhKQptb2RlbF9vbmUgJT4lIHN1bW1hcnkoKQoKCmBgYAoKIyMjU3VtbWFyeSBvZiBNb2RlbAoKYGBge3J9Cm1vZGVsX29uZSAlPiUKICAgICAgICB0aWR5KC4sIGV4cG9uZW50aWF0ZSA9IFRSVUUpICU+JQogICAgICAgIHNlbGVjdCh0ZXJtLCBlc3RpbWF0ZSwgY29uZi5sb3csIGNvbmYuaGlnaCwgcC52YWx1ZSkgJT4lCiAgICAgICAgcmVuYW1lKFZhcmlhYmxlID0gdGVybSwKICAgICAgICAgICAgICAgSGF6YXJkX1JhdGlvID0gZXN0aW1hdGUpICU+JQogICAgICAgIHRibF9kZiAlPiUKICAgICAgICBwcmludChuID0gbnJvdyguKSkKCmBgYAoKIyMgTGluZWFyIFJlZ3Jlc3Npb24gCmBgYHtyfQoKI29ubHkgaW5jbHVkZSByb3dzIHdpdGgga25vd24gdHJlYXRtZW50IGluZm9ybWF0aW9uLCBuID0gNDguIDAgZXhjbHVkZWQuCmRhdGEyIDwtIGRhdGEgJT4lIGZpbHRlcihTVVJHRVJZX1lOICE9ICJVa24iICYgUkFESUFUSU9OX1lOICE9ICJVa24iCiAgICAgICAgICAgICAgICAgICAgICAgICAmIENIRU1PX1lOICE9ICJVa24iKQoKIyBpbmNsdWRlIG9ubHkgdmFyaWFibGVzIHdpdGggZGF0YSBhdmFpbGFibGUgZm9yIGF0IGxlYXN0IDc1JSBvZiBjYXNlcyAoPjEyKQojIGZyb20gdGhlIGZvbGxvd2luZyBzZXQgb2YgdmFyaWFibGVzIG9mIGludGVyZXN0OgoKIyMgRkFDSUxJVFlfVFlQRV9GICsgRkFDSUxJVFlfR0VPR1JBUEhZICsgQ1JPV0ZMWSArIAojIyAgICAgICAgICAgICAgICAgRFhfU1RBR0lOR19QUk9DX0RBWVMgKyAKIyMgICAgICAgICAgICAgICAgIENIRU1PX1lOICsgUkFESUFUSU9OX1lOICsgU1VSR0VSWV9ZTiArIElNTVVOT19ZTiArCiMjICAgICAgICAgICAgICAgICBBR0UgKyBTRVhfRiArIFJBQ0VfRiArIEhJU1BBTklDICsgSU5TVVJBTkNFX0YgKyBJTkNPTUVfRiArIAojIyAgICAgICAgICAgICAgICAgRURVQ0FUSU9OX0YgKyBZRUFSX09GX0RJQUdOT1NJUyArIFNJVEVfVEVYVCArIEdSQURFX0YKCmxlbmd0aCh3aGljaChpcy5uYShkYXRhMiRZRUFSX09GX0RJQUdOT1NJUykpKQoKIyBleGNsdWRlZCB0aGUgZm9sbG93aW5nIGluIHRoaXMgYW5hbHlzaXMgZHVlIHRvIG1pc3NpbmcgZGF0YTogCiMgIG5vbmUKCmZpdF9zdXJ2IDwtIGxtKERYX0xBU1RDT05UQUNUX0RFQVRIX01PTlRIUyB+CiAgICAgICAgICAgICAgICAgRkFDSUxJVFlfR0VPR1JBUEhZICsgQ1JPV0ZMWSArIERYX1NUQUdJTkdfUFJPQ19EQVlTICsKICAgICAgICAgICAgICAgICBDSEVNT19ZTiArIElNTVVOT19ZTiArCiAgICAgICAgICAgICAgICAgQUdFICsgU0VYX0YgKyBSQUNFX0YgKyBJTlNVUkFOQ0VfRiArIAogICAgICAgICAgICAgICAgIFlFQVJfT0ZfRElBR05PU0lTLAogICBkYXRhID0gZGF0YTIpCgpzdW1tYXJ5KGZpdF9zdXJ2KSAjIFJeMiA9ICwgcCA9IAoKIyB0aGUgZm9sbG93aW5nIHZhcmlhYmxlcyB3ZXJlIGV4Y2x1ZGVkIHRvIAojIGltcHJvdmUgdGhlIFItc3F1YXJlZCBvZiB0aGUgcmVncmVzc2lvbiAoaW5pdGlhbGx5IFJeMiA9ICk6CiMgR1JBREVfRiAoYWxsIHdlcmUgdGhlIHNhbWUpLCBTSVRFX1RFWFQsIEhJU1BBTklDLCBGQUNJTElUWV9UWVBFX0YsCiMgRURVQ0FUSU9OX0YsIFNVUkdFUllfWU4sIFJBRElBVElPTl9ZTiwgSU5DT01FX0YsIEVEVUNBVElPTl9GIAoKYGBgCgojIFByZWRpY3Rpb24gTG9naXN0aWMgUmVncmVzc2lvbiBNb2RlbHMKCiMjIFN1cmdlcnkKYGBge3J9Cgpub19Va25zIDwtIGRhdGEgJT4lCiAgZmlsdGVyKFNVUkdFUllfWU4gIT0gIlVrbiIpICU+JSAKICBkcm9wbGV2ZWxzKCkgJT4lIAogIG11dGF0ZShTVVJHRVJZX1lOID0gYXMubG9naWNhbChTVVJHRVJZX1lOKSkKCmZpdF9zdXJnIDwtIGdsbShTVVJHX1RGIH4gCiAgICAgICAgICAgICAgICAgRkFDSUxJVFlfVFlQRV9GICsgCiAgICAgICAgICAgICAgICAgQ0hFTU9fWU4gKyBSQURJQVRJT05fWU4gKyAKICAgICAgICAgICAgICAgICBBR0UgKyBTRVhfRiArIFJBQ0VfRiArIElOQ09NRV9GICsgCiAgICAgICAgICAgICAgICAgWUVBUl9PRl9ESUFHTk9TSVMsCiAgIGRhdGEgPSBub19Va25zKQoKc3VtbWFyeShmaXRfc3VyZykKCiMgdGhlIGZvbGxvd2luZyB2YXJpYWJsZXMgd2VyZSBleGNsdWRlZCB0byBpbXByb3ZlIHRoZSBtb2RlbDoKIyBHUkFERV9GIChhbGwgd2VyZSB0aGUgc2FtZSksIFNJVEVfVEVYVCwgSElTUEFOSUMsIEZBQ0lMSVRZX1RZUEVfRiwKIyBFRFVDQVRJT05fRiwgUkFESUFUSU9OX1lOLCBJTkNPTUVfRiwgRURVQ0FUSU9OX0YgCgpleHAoY2JpbmQoIk9kZHMgcmF0aW8iID0gY29lZihmaXRfc3VyZyksIGNvbmZpbnQuZGVmYXVsdChmaXRfc3VyZywgbGV2ZWwgPSAwLjk1KSkpCmBgYAoKIyMgQ2hlbW8KYGBge3J9Cm5vX1VrbnMgPC0gZGF0YSAlPiUKICBmaWx0ZXIoQ0hFTU9fWU4gIT0gIlVrbiIpICU+JSAKICBkcm9wbGV2ZWxzKCkgJT4lIAogIG11dGF0ZShDSEVNT19ZTiA9IGZjdF9yZWNvZGUoQ0hFTU9fWU4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMCIgPSAiTm8iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjEiID0gIlllcyIpKSAlPiUgCiAgbXV0YXRlKENIRU1PX1lOID0gYXMuaW50ZWdlcihDSEVNT19ZTikpICU+JSAKICBtdXRhdGUoQ0hFTU9fWU4gPSBDSEVNT19ZTiAtIDEpCgpmaXRfY2hlbW8gPC0gZ2xtKENIRU1PX1lOIH4gQUdFX0YgKyBQUklNQVJZX1NJVEUgKyBHUkFERV9GICsgU0VYX0YgKyBSQUNFX0YgKyBJTlNVUkFOQ0VfRiArCiAgICAgICAgICAgICAgICAgICAgICBGQUNJTElUWV9UWVBFX0YgKyBGQUNJTElUWV9MT0NBVElPTl9GICsgRURVQ0FUSU9OX0YgKyBFWFBOX0dST1VQICsgWUVBUl9PRl9ESUFHTk9TSVMsCiAgIGRhdGEgPSBub19Va25zKQoKc3VtbWFyeShmaXRfY2hlbW8pCgpleHAoY2JpbmQoIk9kZHMgcmF0aW8iID0gY29lZihmaXRfY2hlbW8pLCBjb25maW50LmRlZmF1bHQoZml0X2NoZW1vLCBsZXZlbCA9IDAuOTUpKSkKYGBgCgojIyBSYWRpYXRpb24KYGBge3J9Cm5vX1VrbnMgPC0gZGF0YSAlPiUKICBmaWx0ZXIoUkFESUFUSU9OX1lOICE9ICJVa24iKSAlPiUKICBkcm9wbGV2ZWxzKCkgJT4lCiAgbXV0YXRlKFJBRElBVElPTl9ZTiA9IGZjdF9yZWNvZGUoUkFESUFUSU9OX1lOLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjAiID0gIk5vIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIxIiA9ICJZZXMiKSklPiUgCiAgbXV0YXRlKFJBRElBVElPTl9ZTiA9IGFzLmludGVnZXIoUkFESUFUSU9OX1lOKSkgJT4lIAogIG11dGF0ZShSQURJQVRJT05fWU4gPSBSQURJQVRJT05fWU4gLSAxKQoKCmZpdF9yYWRzIDwtIGdsbShSQURJQVRJT05fWU4gfiBBR0VfRiArIFBSSU1BUllfU0lURSArIEdSQURFX0YgKyBTRVhfRiArIFJBQ0VfRiArIElOU1VSQU5DRV9GICsKICAgICAgICAgICAgICAgICAgICAgIEZBQ0lMSVRZX1RZUEVfRiArIEZBQ0lMSVRZX0xPQ0FUSU9OX0YgKyBFRFVDQVRJT05fRiArIEVYUE5fR1JPVVAgKyBZRUFSX09GX0RJQUdOT1NJUywKICAgZGF0YSA9IG5vX1VrbnMpCgoKc3VtbWFyeShmaXRfcmFkcykKCmV4cChjYmluZCgiT2RkcyByYXRpbyIgPSBjb2VmKGZpdF9yYWRzKSwgY29uZmludC5kZWZhdWx0KGZpdF9yYWRzLCBsZXZlbCA9IDAuOTUpKSkKYGBgCgojIyBJbW11bm90aGVyYXB5CmBgYHtyfQpub19Va25zIDwtIGRhdGEgJT4lCiAgZmlsdGVyKElNTVVOT19ZTiAhPSAiVWtuIikgJT4lCiAgZHJvcGxldmVscygpICU+JQogIG11dGF0ZShJTU1VTk9fWU4gPSBmY3RfcmVjb2RlKElNTVVOT19ZTiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIwIiA9ICJObyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMSIgPSAiWWVzIikpJT4lIAogIG11dGF0ZShJTU1VTk9fWU4gPSBhcy5pbnRlZ2VyKElNTVVOT19ZTikpICU+JSAKICBtdXRhdGUoSU1NVU5PX1lOID0gSU1NVU5PX1lOIC0gMSkKCgpmaXRfaW1tdW5vIDwtIGdsbShJTU1VTk9fWU4gfiBBR0VfRiArIFBSSU1BUllfU0lURSArIEdSQURFX0YgKyBTRVhfRiArIFJBQ0VfRiArIElOU1VSQU5DRV9GICsKICAgICAgICAgICAgICAgICAgICAgIEZBQ0lMSVRZX1RZUEVfRiArIEZBQ0lMSVRZX0xPQ0FUSU9OX0YgKyBFRFVDQVRJT05fRiArIEVYUE5fR1JPVVAgKyBZRUFSX09GX0RJQUdOT1NJUywKICAgZGF0YSA9IG5vX1VrbnMpCgoKc3VtbWFyeShmaXRfaW1tdW5vKQoKZXhwKGNiaW5kKCJPZGRzIHJhdGlvIiA9IGNvZWYoZml0X2ltbXVubyksIGNvbmZpbnQuZGVmYXVsdChmaXRfaW1tdW5vLCBsZXZlbCA9IDAuOTUpKSkKYGBgCgojIyBBbnkgVHJlYXRtZW50CmBgYHtyfQpub19Va25zIDwtIGRhdGEgJT4lCiAgZmlsdGVyKFR4X1lOICE9ICJVa24iKSAlPiUKICBkcm9wbGV2ZWxzKCkKCgpmaXRfdHggPC0gZ2xtKFR4X1lOIH4gRkFDSUxJVFlfVFlQRV9GICsgRkFDSUxJVFlfR0VPR1JBUEhZICsKICAgICAgICAgICAgICAgICBBR0UgKyBTRVhfRiArIFJBQ0VfRiArIElOU1VSQU5DRV9GICsgSU5DT01FX0YgKyAKICAgICAgICAgICAgICAgICBFRFVDQVRJT05fRiArIFlFQVJfT0ZfRElBR05PU0lTLAogICBkYXRhID0gbm9fVWtucykKCgpzdW1tYXJ5KGZpdF90eCkKCmV4cChjYmluZCgiT2RkcyByYXRpbyIgPSBjb2VmKGZpdF9yYWRzKSwgY29uZmludC5kZWZhdWx0KGZpdF90eCwgbGV2ZWwgPSAwLjk1KSkpCmBgYAoKIyMgTWV0YXN0YXNpcyBhdCBUaW1lIG9mIERpYWdub3NpcwpgYGB7cn0KCmZpdF9tZXRzIDwtIGdsbShtZXRzX2F0X2R4X0YgfiBBR0VfRiArIFBSSU1BUllfU0lURSArIEdSQURFX0YgKyBTRVhfRiArIFJBQ0VfRiArIElOU1VSQU5DRV9GICsKICAgICAgICAgICAgICAgICAgICAgIEZBQ0lMSVRZX1RZUEVfRiArIEZBQ0lMSVRZX0xPQ0FUSU9OX0YgKyBFRFVDQVRJT05fRiArIEVYUE5fR1JPVVAgKyBZRUFSX09GX0RJQUdOT1NJUywKICAgZGF0YSA9IGRhdGEpCgpzdW1tYXJ5KGZpdF9tZXRzKQoKZXhwKGNiaW5kKCJPZGRzIHJhdGlvIiA9IGNvZWYoZml0X21ldHMpLCBjb25maW50LmRlZmF1bHQoZml0X21ldHMsIGxldmVsID0gMC45NSkpKQpgYGA=